您的位置:首页 > 其它

插入排序和希尔排序

2013-04-13 14:41 162 查看

本博客已迁往http://coredumper.cn

插入排序(Insert Sort)

插入排序的时间性能上界为O(N2),下界为O(N),当原始数组本身就由小到大排列时,性能最好。插入排序是稳定排序算法。

插入排序适用于输入基本有序的情况。

void InsertSort( int A[], int N )
{
int i, j, key;

for(i = 1; i < N; i++ ){
key= A[i];
for(j = i; j >= 1; j -= 1 ){
if(key < A[j-1] ){
A[j]= A[j-1];
}
else{
break;
}
}
A[j]= key;
}
}


希尔排序(Shell Sort)

希尔排序就是步长逐渐缩小直到变成1的多轮插入排序,可以看到,将希尔排序最外面的for循环去掉,再将step置为1,就变成了插入排序。

步长序列step的值是可选的,不同的步长序列导致希尔排序的性能有所差异。常用的步长序列即为下面程序中给出的,初始值为N/2,然后逐次折半,直到变为1,使用这种步长序列的时间性能上界为O(N2);如果使用2k-1,……,7,3,1这个步长序列,则时间性能上界为O(N3/2)。

希尔排序是不稳定排序算法。

void ShellSort( int A[], int N )
{
int step, i, j, key;

for(step = N / 2; step > 0; step /= 2 ){
for(i = step; i < N; i++ ){
key= A[i];
for(j = i; j >= step; j -= step ){
if(key < A[j-step] ){
A[j]= A[j-step];
}
else{
break;
}
}
A[j]= key;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息