八种排序的关系:
算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
package com.chb.sort;
/**
* 希尔排序(最小增量排序)
* 增量d=n/2的序列进行 直接插入排序
* d减小 直至d=1排序结束
*
*/
public class ShellSort {
public static void main(String[] args) {
shellSort(a);
}
static int a[]={1,54,6,3,78,34,12,45,56,100};
public static void shellSort(int[] a){
int d = a.length;
while(true) {
d = (int) Math.ceil(d/2);
for (int i = 0; i = j && a[k] > insertNum){
a[k+d] =a[k];
k-=d;
}//跳出循环 a[k] < insertNum,
//所以k后面的是要插入的位置
//if ((k+d)!= j) {
a[k+d] = insertNum;
//}
}
}
if (d == 1) {
break;
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}