菜鸡学习之插入排序------学习算法记录1

来源:互联网 发布:js闭包的理解 编辑:程序博客网 时间:2024/06/15 17:23

  咳咳,第一次写博客,希望没人看我的博客 xD !写博客也是记录一下自己的学习过程吧。废话不多说,来,代码撸起来;

  参考书目《算法导论》

  什么是插入排序呢,书上把插入排序的过程比作是堆牌的过程。先拿一张,比如说是5,再从桌子上拿一张,假如是4,辣么就放到5的左边。对不对?是不是很简单!蛤蛤

  之后的过程其实是一样的,抓到的牌记为key牌,一个一个的和之前已经排完序的序列比较,大就放在右边,小就放在左边。

  伪代码如下(摘自算法导论):

INSERTION-SORT

for j = 2 to A.length

key = A[j]

//Insert A[j] into the sorted A[1...j - 1].

i = j - 1

while i >0 and A[i] > key

A[i+1] = A[i]

i = i - 1

A[i+1] = key


C++代码: 

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;typedef long long ll;template<class T>int getArrayLen(T& array){    return (sizeof(array)/sizeof(array[0]));}int main(){    int arr[6] = {5,2,4,6,1,3};    int j, key, len = getArrayLen(arr);    printf("%d\n",len);    for(int i = 1;i < len;i++){        key = arr[i];        j = i - 1;        while(j >= 0 && arr[j] > key){ //这里和伪代码不一样,伪代码的数组下标都加一了,所以这里是大于等于0            arr[j+1] = arr[j];            j--;        }        arr[j+1] = key;    }    for(int k = 0;k < len;k++){        printf("%d ",arr[k]);    }    return 0;}


  哎,只怪自己之前c++没有学好,java用惯了,一直用arr.length(); 然后再C++里也用,简直太蠢了。后来在网上搜了一下怎么得到数组的长度,sizeof(arr)是指数组指针的大小

得到数组的大小可以定义一个模板,以后直接调用就可以啦,代码在上面!

  好了,我滚去看书了

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

书后的一个练习题: 非升序排序 直接写代码吧:

C++代码:

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;typedef long long ll;template<class T>int getArrayLen(T& array){    return (sizeof(array)/sizeof(array[0]));}int main(){    int arr[6] = {5,2,4,6,1,3};    int j, key, len = getArrayLen(arr);    for(int i = len - 2;i >= 0;i--){        key = arr[i];        j = i + 1;        while(j < len && arr[j] > key){            arr[j-1] = arr[j];            j++;        }        arr[j-1] = key;    }    for(int k = 0;k < len;k++){        printf("%d ",arr[k]);    }    return 0;}


思路和升序其实是一样的,升序第一张key牌是第二个数,降序的第一张key牌是倒数第二个


原创粉丝点击