堆排序(大根堆)

    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
排序算法 文章被收录于专栏

排序算法

全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务