账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    堆排序!球球大佬们救救我!!折腾我好久好久了,就是死活不知道哪里出错了!!呜呜呜~~
    • 2019-12-02 00:00
    • 10
    42
    0
    function heapify(arr, father, len) {
        // if(father>=len){//作为递归出口
        //     return
        // }
        // 这里通过传递父节点的下标,可以计算出两个孩子的下标,并且下标不可超出arr长度
        var leftchild = father * 2 + 1;
        var rightchild = father * 2 + 2;
        var maxchild = father;
        if (leftchild <= len && arr[leftchild] > arr[father])
            maxchild = leftchild
        if (rightchild <= len && arr[rightchild] > arr[father])
            maxchild = rightchild
        if (maxchild !== father) {
            [arr[maxchild], arr[father]] = [arr[father], arr[maxchild]]
            heapify(arr, maxchild, len)//整理堆结构
        }
    }
    
    function builheap(arr, len) {
        var i = Math.floor((len - 1) / 2);
        while (i >= 0) {
            heapify(arr, i, len)
            i--;
        }
    }
    
    function heapSort(arr) {
        // 最后开始真正的堆排序
        var len = arr.length-1;
        builheap(arr, len)//第一次建堆,建堆完砍掉最后一个数,从顶部开始重新建堆开始建堆
        while (len >= 0) {
            [arr[0], arr[len]] = [arr[len], arr[0]];
            len--;
            heapify(arr, 0, len)//重新整理堆结构,从顶元素开始
        }
        console.log(arr)
    }
    heapSort(arr)
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部