- 希尔排序是简单插入排序的改进版,它又叫最小增量排序
- 它与插入排序的不同之处在于,它会优先比较距离较远的元素
- 其复杂度为 O(nlog n)
思路
- 根据序列长度算出步长,序列长度的一半即可
- 把距离等于步长的元素,分成一组,在组内进行插入排序
- 第二轮循环,步长减半,再次重复第二步分组,排序
- 直至步长为 1 ,最后进行一次插入排序,即可得到正序排列的序列
代码
const shellSort = (list) => {
const len = list.length;
let gap = Math.floor(len / 2);
const insertionSort = (array, gap) => {
for (let i = gap; i < array.length; i++) {
for (let j = i - gap; j >= 0; j -= gap) {
if (array[j] > array[j + gap]) {
[array[j], array[j + gap]] = [array[j + gap], array[j]];
} else {
break;
}
}
}
};
for (gap; gap > 0; gap = Math.floor(gap / 2)) {
insertionSort(list, gap);
}
return list;
};
const list = [1, 4, 2, 6, 5, 8];
console.log(shellSort(list));