谈论排序的时候,绝对不会少了插入排序算法,它实在是太经典了,而且十分简单。
算法:插入排序
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;
}