1. 希尔排序
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。
希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。
它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。 --引自菜鸟教程
1.1 我理解的希尔排序
首先希尔排序是插入排序的一种。希尔排序是建立在分组中的插入排序,所以,要先将排序序列进行分组。每组大小可以是排序序列的长度除以2。然后再进行插入排序。第一分组执行完毕,再以第一次分组的大小除以2进行分组,然后再进行插入排序,以此反复直到分组的大小小于1.
1.2 代码实现
function shellSort(arr) {
const len = arr.length;
let groupNumber = Math.floor(len / 2);
while (groupNumber >= 1) {
for (let i = groupNumber; i < len; i++) {
let temp = arr[i];
let j = i - groupNumber;
for (; j >= 0 && arr[j] > temp; j-=groupNumber) {
arr[j + groupNumber] = arr[j];
}
arr[j + groupNumber] = temp;
}
groupNumber = Math.floor(groupNumber / 2);
}
return arr;
}