希尔排序就是利用底层实现的插入排序的变种算法,效率要优于插入排序。设置步幅从高到低进行排序直到步幅为1排序结束。比如长度为10的数组最大步幅为3,则进行0 3;1 4;2 5;...进行比较,其次的步幅为2则进行0 2;1 3;2 4;...的比较直到步幅为1时结束。
public static void sort(Comparable[] arry) {
int zl = arry.length/2; //设置步幅
while (zl >= 1) {
for (int i = zl; i < arry.length; i++) {
Comparable e = arry[i];
int j;
for (j= i; j >= zl && arry[j].compareTo(arry[j - zl]) < 0; j -= zl) //初始化步幅的位置,比较的时候减去步幅进行比较
arry[j] = arry[j - zl];
arry[j] = e;
}
zl /= 2; //降低步幅
}
}