排序算法(三)之插入排序

 谈论排序的时候,绝对不会少了插入排序算法,它实在是太经典了,而且十分简单。
算法:插入排序
Insertion_sort(A)
for j = 2 to A.length
 do key=A[j]
           i = j-1
           while(i>0 &&A[i]>key)
                do A[i+1]=A[i]
                   i = i-1;
           A[i+1]=key

 

我是那扑克牌研究了下才领悟的。。

C++代码:

//插入排序很明显为O(n^2),但在一定条件下比快排好,比如说基本排好序的序列
//插入排序用O(n),快排用O(nlgn)。而且快排在worst_case中,
//快排也是O(n^2)。
//code for testing InsertSort by ouyang
#include <iostream>

using namespace std;

void InsertSort(int *a,int len)
{
    //从第二张牌开始排序,因为我们默认第一张就是排好的
    //扑克牌分为3部分:
    //1.已排好的,从1到j-1
    //2.拿在手上待排的j
    //3.未排好的j+1到n
    //拿在手上的排如果比已排好的i大,那么就排在i之后
    //如果比i小,那么就和i的之前的一个比较,直到i==1
    //然后把这张牌插入到i+1处。
    for(int j=2; j<=len; j++)
    {
        int key=a[j];
        int i=j-1;
        while(i>=1 && a[i]>key)
        {
            a[i+1]=a[i];
            i--;
        }
        a[i+1]=key;
    }
}

int main()
{
    int array[9]= {NULL,1,3,5,2,4,7,0,1};
    int len=sizeof(array)/sizeof(int);
    InsertSort(array,len);
    for(int j=1; j<=len; j++)
        cout<<array[j]<<" ";
    cout<<endl;
    return 0;
}


你可能感兴趣的:(排序算法(三)之插入排序)