概念
這是一個叫希爾的人想到的,所以叫做希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進版本。但希爾排序是非穩定排序算法。
邏輯
首先,選擇增量 gap = 10/2 = 5 把所有的數分成5組,對每組進行排序
縮小增量繼續以 gap = gap/2 = 2 把所有的數分成2組,對每組進行排序
通過這種方式,縮小這個數組的有序度,然後在對整個數組進行插入排序
用這種方式減小複雜度
代碼
// 希爾算法
function shell_sort(nums) {
let len = nums.length;
// 初始步數
let gap = parseInt(len / 2);
// 逐漸縮小步數
while (gap) {
// 從第gap個元素開始遍歷
for (let i = gap; i < len; i++) {
// 逐步其和前面其他的組成員進行比較和交換
for (let j = i - gap; j >= 0; j -= gap) {
if (nums[j] > nums[j + gap]) {
[nums[j], nums[j + gap]] = [nums[j + gap], nums[j]];
}
else {
break;
}
}
}
gap = parseInt(gap / 2);
}
}
var sortArr = [9, 6, 3, 5, 2, 1, 7, 9999, 343, 6, 643, 243, 544, 5, 63, 234, 0, 56, 123]
shell_sort(sortArr)
console.log(sortArr)