希尔排序

76 阅读1分钟
function xier(arr) {
            let len = arr.length;//数组长度
            let willinsertValue;
            let gap = len;//增量
            //trunc取整 gap = 4
            while (gap > 0 && (gap = Math.trunc(gap / 2))) {
                //对每一个分组插入排序 i=4,5
                for (let i = gap; i < len; i++) {
                    //将要插入的值
                    willinsertValue = arr[i]
                    // 0,1
                    let j = i - gap;
                    //arr[1]>arr[5]
                    while (j > 0 && arr[j] > willinsertValue) {
                        //前后调换位置
                        arr[j + gap] = arr[j]
                        //-3
                        j -= gap
                    }
                    arr[j + gap] = willinsertValue
                }
                return arr
            }
        }
        console.log(xier(arr));