Shell Sort
也叫缩小增量排序,是插入排序的一种更高效的改进版本
希尔排序是基于插入排序改进
插入排序是每次往有序数组中逐个比较然后找到位置插入,或者说逐个交换直到有序
而希尔排序就是将使用一个间隔来减少交换次数
这个间隔就是增量
每次循环都缩小这个间隔,直到最后一次和插入排序相同
这就是缩小增量了
function sortArray(nums: number[]): number[] {
if (nums.length <= 1) {
return nums
}
// 使用间隔nums.length/2,并且每次循环都将间隔/2
for (
let gap = Math.floor(nums.length / 2);
gap > 0;
gap = Math.floor(gap / 2)
) {
// 将插入排序中的在有序数组中逐1比较改为逐间隔比较
for (let i = gap; i < nums.length; i++) {
for (let j = i; j >= gap && nums[j - gap] > nums[j]; j = j - gap) {
;[nums[j - gap], nums[j]] = [nums[j], nums[j - gap]]
}
}
}
return nums
}
时间复杂度:O(n(logn)²) 空间复杂度:O(1) 稳定性:不稳定