希尔排序其实就是对插入排序的优化。
首先插入排序要想效率高,需要两个前提条件:元素少、基本有序。
希尔排序就是利用这点。所以对原数组进行增量分组,然后对每个组进行插入排序。
/**
*
* @param {*} arr
* 希尔排序
*/
function shellSort(arr) {
let len = arr.length,
temp,
gap = 1;
while (gap < len / 3) {
//动态定义间隔序列
gap = gap * 3 + 1;
}
for (gap; gap > 0; gap = Math.floor(gap / 3)) {
for (let i = gap; i < len; i++) {
temp = arr[i];
let j = i - gap;
for (; j >= 0 && arr[j] > temp; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
console.log('arr :', arr);
}
}
};
希尔排序的代码实现是有点不好理解的,暂时没想到这个算法的应用场景