希尔排序
希尔排序:
一句话描述: 将数列分组。每组表示为 [ i,i+d,i+2d,i+3d,...i+kd ] 。每组都用插入排序。最后对整个数组进行一次插入排序。
增量序列希尔提出为:d1=n/2 , d2=d1/2 ...,最后一个增量等于 1
复杂度难以计算
C++实现:
1 //希尔排序 2 //不稳定算法 3 //时间复杂度:平均n^1.3 最坏:n^2 4 //一句话描述: 将数列分组。每组表示为[i,i+d,i+2d,i+3d,...i+kd]。每组都用插入排序。最后对整个数组进行一次插入排序。 5 //增量序列希尔提出为:d1=n/2 , d2=d1/2 ...,最后一个增量等于 1 6 7 void ShellSort(int (&A)[10]){ 8 int d; 9 for(d=10/2;d>1;d=d/2){ 10 changeD(A,d); 11 } 12 InsertionSort(A); //直接插入排序 13 } 14 15 16 void changeD(int (&A)[10],int d){ 17 for(int j=0;j<d;j++){ 18 for(int k=j+d;k<10;k=k+d){ //k为未整理数组 19 int tmp=A[j+d]; 20 for(int i=j;i>=0;i=i-d){ //i为 整理好的数组的最后一个 21 if(tmp<A[i]) 22 Swap(A[i+d],A[i]); 23 24 } 25 } 26 } 27 }
浙公网安备 33010602011771号