希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 9,然后再次分割更小的间隔对比,等到间隔为1时,就是两两对比,
代码实现:
function shell(arr = []) { var length = arr.length, gap = 1; while (gap > length / 3) { gap = gap * 3 + 1 } while (gap >= 1) { for (let i = 0; i < arr.length; i++) { for (let j = i; j >= gap && arr[j] > arr[j - gap]; j -= gap) { var temp = arr[j]; arr[j] = arr[j-gap] arr[j-gap] = temp } } gap = (gap - 1) / 3 } return arr } console.log( shell([1,4,5,8,9,5,6,15,20,7]) )
通常希尔排序的效率,与gap的值有关系,通过while循环动态设置间隔间隙来优化效率
原文:https://www.cnblogs.com/alone4436/p/14643361.html