希尔排序是基于插入排序的。
比如是个数为10的数组,
首先将增量设置为 10/2,就是5,将分组中,每5个进行分组,将分组后的每一组进行排序
之后再将增量设置为5/2,约等于3,将分组中,每3个进行分组,将分组后的每一组进行排序
以此类推,当增量为1的时候,就将整个数组进行排序。
function shellSort(nums){
let len = nums.length
// 先初始化增量
let gap = Math.floor(len / 2)
// 进行循环,增量减少
while(gap >= 1){
// 以gap作为间隔,进行分组,进行插入操作
for(let i = gap;i < len;i++){
let temp = nums[i]
let j = i
// 就是插入排序
while(nums[j - gap] > temp && j > 0){
nums[j] = nums[j - gap]
j -= gap
}
nums[j] = temp
}
gap = Math.floor(gap / 2)
}
}