首页 > 编程语言 > 详细

JS 希尔排序完全理解

时间:2021-04-11 16:07:11      阅读:26      评论:0      收藏:0      [点我收藏+]

希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为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循环动态设置间隔间隙来优化效率

JS 希尔排序完全理解

原文:https://www.cnblogs.com/alone4436/p/14643361.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!