您的位置:首页 > 其它

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

2011-12-25 14:53 127 查看
 谈论排序的时候,绝对不会少了插入排序算法,它实在是太经典了,而且十分简单。
算法:插入排序
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 testing null c