堆排序(大根堆)

    var arr = [49,38,27,97,76,13,65,50];
    function MaxHeap(arr,size,i){
        //左子节点
        var left = i*2+1;
        //右子节点
        var right = i*2+2;
        //假设这个根节点为最大
        var max = i
        //如果左子树的节点大于根节点则将max赋值
        if(left<size && arr[left]>arr[max]){
            max = left
        }
        //如果右子树的节点大于根节点则将max赋值
        if(right<size && arr[right]>arr[max]){
            max = right
        }
        //如果存在比根节点大的值
        if(max !== i){
            var temp = arr[max];
            arr[max] = arr[i];
            arr[i] = temp;
            //调整后子节点可能不是最大堆,需要重新调整
            MaxHeap(arr,size,max)
        }
    }
    function HeapSort(arr) {
        var len = arr.length
        // 从最后一个根节点来调整堆
        var lastIndex = Math.floor((len - 1 - 1) / 2); //寻找倒数第二行的根节点的索引
        for(var i=lastIndex;i>=0;i--){
            MaxHeap(arr,len,i)
        }
        return arr;
    }
    console.log(HeapSort(arr)); //97,76,65,50,49,13,27,38
排序算法 文章被收录于专栏

排序算法

全部评论

相关推荐

996的工作制还是没能硬啃下去,快要面试怂了,取消了
牛客80700350...:很正常,不是所有人都能接受这种强度的。不叫怯战,这叫明智
点赞 评论 收藏
分享
04-15 14:58
中南大学 Java
点赞 评论 收藏
分享
牛客100866号技...:把电科加粗,把电科加粗,把电科加粗,两个吊车尾的项目合并成一个,再加一个管理系统。电科✌🏻在成都面中厂手拿把掐
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务