SOURCE

function heapSort (list) {
    for (let i = 1; i < list.length; i++) {
        let idx = i, pIdx = Math.floor(idx / 2)
        while (idx > 0 && list[pIdx] < list[idx]) {
            [list[pIdx], list[idx]] = [list[idx], list[pIdx]]
            idx = pIdx
            pIdx = Math.floor(idx / 2)
        }
    }
    for (let i = list.length - 1; i > 0; i--) {
        [list[0], list[i]] = [list[i], list[0]]
        let pIdx = i, lIdx = pIdx * 2 + 1, rIdx = pIdx * 2 + 2
        while (lIdx < i && Math.max(list[lIdx], list[rIdx]) < list[pIdx]) {
            let swapIdx = list[lIdx] > list[rIdx] ? lIdx : rIdx
            [list[swapIdx], list[pIdx]] = [list[pIdx], list[swapIdx]]
            pIdx = swapIdx
            lIdx = pIdx * 2 + 1, rIdx = pIdx * 2 + 2
        }
    }
    return list
}

console 命令行工具 X clear

                    
>
console