希爾排序又稱縮小增量排序,是插入排序的改進版本,最壞時間複雜度和平均時間複雜度都是nlog2 n(不一定)
目前並沒有找到一種最好的增量序列。
/*希爾排序,選擇的序列爲9,5,3,2,1
公式爲dlta[k]=2^(t-k)+1*/
#include<stdio.h>
const int NUM=10;
void shellInsert(int array[],const int length,int dk){//這裏實際上就是一個插入排序
int i,j,tmp;
for(i=dk;i<length;i+=dk){
tmp=array[i];
for(j=i-dk;j>=0&&tmp<array[j];j-=dk)
array[j+dk]=array[j];
array[j+dk]=tmp;
}
}
void shellSort(int array[],const int length){
int dk[5]={9,5,3,2,1};//增量數組
for(int i=0;i<5;i++)
shellInsert(array,length,dk[i]);
}
int main(){
int array[NUM]={1,3,5,7,9,0,8,6,4,2};
shellSort(array,NUM);
for(int i=0;i<NUM;i++){
printf("%d ",array[i]);
}
}
轉載請標明出處,原文http://blog.csdn.net/ccy0815ccy