雪雪诺儿

导航

希尔排序

希尔排序:

一句话描述: 将数列分组。每组表示为 [ 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 }

 

posted on 2016-04-05 19:58  雪雪诺儿  阅读(155)  评论(0)    收藏  举报