• 堆的属性
  1. 完全二叉树
  2. 每个节点的值都大于(最大堆)或都小于(最小堆)子节点的值

堆只是一种数据的组织形式,存储结构可以用数组,在构建堆的过程中,可以使用完全二叉树的性质求父子节点的下标。

父节点的下标 = 向下取整 ( (子节点下标 - 1) /  2)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
void minheap();
void maxheap();
using namespace std;
int arr[8] = { 53,17,78,9,45,65,87,23 };
int *a = new int[8];//保存小根堆
int index = 0;
int main()
{minheap();cout << "建立的最小堆为:" << endl;for (int i = 0; i < 8; i++){cout << a[i] <<" ";}system("pause");
}void maxheap() {while(index < 8) {a[index] = arr[index];if (index != 0) {int son_index = index;int par_index = floor((son_index - 1) / 2);while(a[par_index] < a[son_index]) {int tmp = a[par_index];a[par_index] = a[son_index];a[son_index] = tmp;son_index = par_index;par_index = floor((par_index - 1) / 2);}}index ++;}
}
void minheap()
{while (index < 8) {a[index] = arr[index];if (index != 0) {int son_index = index;int par_index = floor((son_index - 1) / 2);while (a[par_index] > a[son_index]) {//小根堆:父节点大的话需要交换int temp = a[par_index];//交换a[par_index] = a[son_index];a[son_index] = temp;son_index = par_index;//迭代看之前的是否需要调整par_index = floor((son_index - 1) / 2);}}index ++;}
}

C++ 构建最小堆、最大堆相关推荐

  1. 堆 最小堆 最大堆 堆排序(小到大,大到小)

    导航 1.了解什么是堆 2.如何创建最小堆,最大堆 3.新增值在堆中如何进行 4.完整的堆排序,升序和降序(两种方式) ---------------------------------------- ...

  2. 数据结构 - 最小堆最大堆

    可以在O(nlogn)的时间复杂度内完成排序 典型的用法是,寻找 第k个/前k个 最大/最小元素,k个有序序列合并 1.合并K个升序链表(最小堆实现) 或许可以改进成每次堆只存放K个元素? # Def ...

  3. Leetcode295 数据流中的中位数-最小堆和最大堆

    题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如,[2,3,4] 的中位数是 3:[2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两 ...

  4. C++实现最大堆最小堆

    目录 堆和栈的区别 最大堆与最小堆 最大堆的操作 最大堆的插入操作 最大堆的弹出操作 最大堆的C++代码实现 最小堆概念 最小堆的插入操作 最小堆的弹出操作 最小堆的C++代码实现 最大堆最小堆的应用 ...

  5. C++之最小堆、最大堆

    #include<queue> #include<vector> std::priority_queue<int> big_heap; // 构造一个默认最大堆 s ...

  6. Leetcode215数组中第k大的数-最小堆

    题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  7. 利用最小堆找出10亿个数中最大的10000个数

    最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小 ...

  8. 数据结构最小堆C++实现

    1.最小堆的结构: 左右子女的元素均小于等于父节点的元素,叫最小堆:左右子女的元素均大于等于父节点的元素,叫最大堆. 2.最小堆的建立过程如下图所示: 所有节点从上往下,从左往右一次标号0,1,2,. ...

  9. 最小堆以及最小优先队列的实现

    最小堆的实现 什么是最小堆 构建最小堆 MIN_HEAPITY的实现 MIN_HEAPIFY的时间复杂度分析 BUILD_MIN_HEAP的实现 建最小堆的时间复杂度分析 什么是最小堆 最小堆从逻辑上 ...

最新文章

  1. Linux — OpenSSH 安全的远程连接
  2. 每日一皮:前程序员离职后没人想接的代码...
  3. 2012年寒假•青年基金【修改后发表】
  4. SQL结构化查询语言中的LIKE语句
  5. Python深浅拷贝教程-面试必问内容
  6. SAP Gateway 类型为multipart mixed的请求处理逻辑
  7. Java面试——Redis系列总结
  8. Redis集群之主从复制
  9. SpringBoot配置文件加密
  10. SpringSecurity系列(五) Spring Security 权限设计
  11. java 代码效率_提高代码性能效率总结(一)--Java
  12. PHPStorm/IntelliJ IDEA 设置SFTP
  13. vtuber面部捕捉工具_如何做一名VTuber?一个VUP就足够
  14. 杂志特稿:元宇宙将重塑我们的生活,我们要确保它变得更好
  15. flash 围棋_围棋怎么玩,最还有flash
  16. 机房动环监控解决方案!
  17. 九方财富更新招股书:上半年营收9亿 冲刺港股一年未果
  18. 成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
  19. RTX服务器信息存档,Rtx/RTX服务器端基本应用(一)
  20. 2553. 【NOIP2011模拟9.7】射命丸文 (Standard IO)

热门文章

  1. mysql运算结果放入表中_MySQL表1新增数据,计算开始、结束日期之间所有时间,插入到表2中...
  2. 《鸿蒙理论知识02》HarmonyOS开发平台和工具
  3. All your files have been encrypted
  4. php 接入微信 验证,PHP实现微信公众平台企业号验证接口
  5. 实战sqlmap绕过WAF
  6. React Native项目自动化打包发布
  7. web前端学习之ruby标记和rt/rp标记
  8. html笔记(一)html4+css2.0、css基础和属性、盒模型
  9. 数据库 日期格式操作
  10. Docker设置HTTP代理