基本思想:
算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
代码块:
//希尔排序(最小增量排序)
public class ShellSort {
public static void main(String[] args) {
int a[]={34,21,60,1,44,31,57,18,9,11};
double der=a.length; //数组总个数
int temp=0;
while(true){
der=Math.ceil(der/2); //取整,返回目标数的最小整数
int d=(int) der; //增量d
for(int p=0;p<d;p++){ //排序次数
for(int i=p+d;i<a.length;i+=d){ //控制a[i]的位置比a[j]的位置多一个d的增量
int j=i-d;
temp=a[i];
for(;j>=0&&a[j]>temp;j-=d){//当左边的a[j]的值大于a[i]的值的时候交换
a[j+d]=a[j];
}
a[j+d]=temp;
}
}
if(d==1){
break;
}
}
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}