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

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

作者: 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作为父节点的情况
        }
    }
    
}

相关文章

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

    直接将数组调整成最大或者最小堆 @heapsortbegin():1.将数组转成堆heapify();2.移出根结...

  • 1. 最小堆算法 以前也写过最小堆算法, 但是没什么印象了, 周末想重写下看看. 还是直接看代码吧. 构建堆说明:...

  • 堆调整算法

    堆调整算法 思路 算法将获取到一组数据的最大值(针对大顶堆)或最小值(针对小顶堆)。 基本思想 通过堆排序的调整算...

  • 堆排序的堆类 --- Javascript实现

    堆排序 最大堆(儿子皆小于双亲) 最小堆(双亲皆小于儿子) 堆建立 构建堆调整函数(调整范围,索引以下的部分,至少...

  • 02-13:leetcode重刷5之最大堆/最小堆

    1、最大堆/最小堆结构 (1)最大堆 堆顶元素最大,其他元素都小于等于:堆顶 (2)最小堆 堆顶元素最小,其他元素...

  • 每天一点算法-堆(Day9)

    上一篇介绍了完全二叉树,今天介绍的堆就是一颗完全二叉树,但堆要被放到数组里做实现。 最大堆、最小堆 最小堆(小根堆...

  • es6相关

    数组常用 扩展运算符(...) Array.from()将类数组转成真正的数组 Array.of() 将一堆数字转...

  • 堆的基本操作与堆排序(C/C++实现)

    原理参考:堆和堆排序原理介绍 堆的基本操作(以最小堆为例) 基本数组的定义 向下调整操作 向下调整操作一般是针对一...

  • 堆排序

    堆排序是利用二叉堆的自调整特性将数组变为有序序列的排序方法二叉堆的特性: 最大堆的堆顶是整个堆中的最大元素。 最小...

  • 八大排序算法的Python实现__7__堆排序

    个人技术博客地址:http://songmingyao.com/ 原理 将列表构造成最大堆或最小堆 将堆的根节点,...

网友评论

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

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