希尔排序是直接插入排序的一种优化,他的基本思想是:先将整个待排序列分成若干子序列进行插入排序,待整个序列基本有序时再对全体记录进行一次直接插入排序。其时间复杂度和它的增量有关。
public static void ShellSort(int [] x){
int h=1;
while(h<x.length/3)
h=h*3+1;
while(h>0){
for(int i=h;i<x.length;i++){
int temp=x[i];
int j=i;
while(j>h-1&&x[j-h]>=temp){
x[j]=x[j-1];
j-=h;
}
x[j]=temp;
}
h=(h-1)/3;
}
for(int i=0;i<x.length;i++){
System.out.print(x[i]+" ");
}
}