public class ShellSortTest
{
public static void shellSort(int[] a){
int i,j,temp;
int N=a.length;
int increment=1;
while(increment<N/3) increment=increment*3+1;
do{
//选取了一个值作为一个比较好的增量值,可以实现好的排序
for(i=increment;i<a.length;i++)
{
if(a[i]<a[i-increment]){//有这个比较可以减少判断次数
temp = a[i];//将选中的比较大的值进行标注
for(j=i-increment;j>=0&&a[j]>temp;j-=increment){
a[j+increment]=a[j];
}
a[j+increment]=temp;
}
}
increment = increment/3;
}while(increment>=1);
for(int elem:a)
System.out.print(elem+" ");
}
public static void main(String[] args)
{
int[] a=new int[]{9,1,5,8,3,7,4,6,2,12,22,14,16,34,100,17,23,56,140,0,11};
shellSort(a);
}
}