希尔排序
我的理解,希尔排序是增加了步长的插入排序。
有经验的程序员有时会选择希尔排序,因为对于中等大小的数组它的运行时间是可以接受的。它的代码量很小,且不需要使用额外的内存空间
如果你需要解决一个排序问题而又没有系统排序函数可用(例如直接接触硬件或是运行于嵌入式系统中的代码),可以先用希尔排序,然后再考虑是否值得将它替换为更加复杂的排序算法
public class Shell {
public static void sort(Comparable[] a) {
int length = a.length;
// 步长;分片大小
int h = 1;
while (h < length / 3) {
h = 3 * h + 1;
}
while (h >= 1) {
for (int i = 0; i < length; i++) {
for (int j = i; j >= h && less(a[j], a[j - h]); j -= h) {
exchange(a, j, j - h);
}
}
h = h / 3;
}
}
}