堆排序(大根堆)

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

排序算法

全部评论

相关推荐

Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
05-11 20:45
门头沟学院 Java
有担当的灰太狼又在摸...:零帧起手查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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