希爾排序由 Donald Shell 於 1959 年發表,是插入排序的高效改進版本。
d1 < n,將記錄分組,距離為 d1 倍數的歸為一組。d2 < d1 重複分組排序。dt = 1,所有記錄在一組中直接插入排序結束。public class ShellSorter {
public void sort(int[] array) {
int d = array.length;
do {
d /= 2;
shellPass(array, d);
} while (d > 1);
}
private void shellPass(int[] array, int d) {
for (int i = d; i < array.length; i++) {
int tmp = array[i];
if (array[i] < array[i - d]) {
int j;
for (j = i - d; j >= 0 && tmp < array[j]; j -= d) {
array[j + d] = array[j];
}
array[j + d] = tmp;
}
}
}
}