美文网首页
堆调整算法-直接将数组转成最大最小堆

堆调整算法-直接将数组转成最大最小堆

作者: sinemetu | 来源:发表于2019-01-07 22:13 被阅读0次

    直接将数组调整成最大或者最小堆


    @heapsort
    begin():
    1.将数组转成堆\leftarrowheapify();
    2.移出根结点的值,然后把最后一个元素移动到根节点处;
    3.while(len>0)
    调整堆\leftarrowheapify();
    转2;
    end();


    堆化算法:最小堆

    void heapify(vector<int> arr) {
        int len = arr.size();
        for (int k = (len - 1) / 2; k >= 0; k--) //从距离叶子最近的节点开始
        {
            while (k * 2 + 1 < len) 
            {
                int son = k * 2 + 1;        // A[i] 的左儿子下标
                if (k * 2 + 2 < len&& arr[son] > arr[k * 2 + 2]) {//如果有右儿子子并且左儿子大于右耳子
                    son = k * 2 + 2;        // 选择两个儿子中较小的
                }
                if (arr[son] > arr[k]) {
                    break;
                }//左右儿子都大于父节点,退出while循环,否则交换
                int temp = arr[son];
                arr[son] = arr[k];
                arr[k] = temp;
                k = son;//调换之后,son作为父节点的情况
            }
        }
        
    }
    

    相关文章

      网友评论

          本文标题:堆调整算法-直接将数组转成最大最小堆

          本文链接:https://www.haomeiwen.com/subject/qypprqtx.html