Skip to content

Latest commit

 

History

History
39 lines (37 loc) · 1.06 KB

File metadata and controls

39 lines (37 loc) · 1.06 KB
/**
 * 2019/5/27
 * 公众号: 「一个不甘平凡的码农」
 * 功能:希尔排序
 * @author 小鹿
 */
function shellSort(arr) {
    // 数组的总长度
    let len =arr.length;
    // 初始步长为长度的一半
    gap = Math.floor(len/2);
    // 如果步长为正整数,开始排序
    while(gap !== 0){
        // 外循环 i 控制步长
        for(let i = gap;i < len;i++){
            // 插入排序准备分组比较
            let temp = arr[i];
            // 步长比较的另一方
            let j = i - gap;
            // 如果后边小,则插入排序交换位置
            for(;j >= 0 && temp < arr[j];j -= gap){
                // 将大的数据移动到后边
                arr[j + gap] = arr[j];
            }
            // 小数据补充上去(注意:上方执行了j -= gap)
            arr[j + gap] = temp;
        }
        // 进一步缩小步长
        gap=Math.floor(gap/2);
    }
    return arr;
}

// example
let arr = [8,5,6,1,7,3,2,4];
console.log(shellSort(arr));