- 希尔排序是简单插入排序的改进版,它又叫最小增量排序
- 它与插入排序的不同之处在于,它会优先比较距离较远的元素
- 其复杂度为 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));