先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:
private static void sort(int[] arr) {
int len = arr.length;
for (int gap = Math.floorDiv(len, 2); gap > 0; gap = Math.floorDiv(gap, 2)) {
for (int i = gap; i < len; i++) {
int j = i;
int current = arr[i];
while (j - gap >= 0 && current < arr[j - gap]) {
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = current;
}
}
}
希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版)》的合著者Robert Sedgewick提出的。
原文:https://www.cnblogs.com/StivenYang/p/13197925.html