C++ 构建最小堆、最大堆
- 堆的属性
- 完全二叉树
- 每个节点的值都大于(最大堆)或都小于(最小堆)子节点的值
堆只是一种数据的组织形式,存储结构可以用数组,在构建堆的过程中,可以使用完全二叉树的性质求父子节点的下标。
父节点的下标 = 向下取整 ( (子节点下标 - 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.了解什么是堆 2.如何创建最小堆,最大堆 3.新增值在堆中如何进行 4.完整的堆排序,升序和降序(两种方式) ---------------------------------------- ...
- 数据结构 - 最小堆最大堆
可以在O(nlogn)的时间复杂度内完成排序 典型的用法是,寻找 第k个/前k个 最大/最小元素,k个有序序列合并 1.合并K个升序链表(最小堆实现) 或许可以改进成每次堆只存放K个元素? # Def ...
- Leetcode295 数据流中的中位数-最小堆和最大堆
题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如,[2,3,4] 的中位数是 3:[2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两 ...
- C++实现最大堆最小堆
目录 堆和栈的区别 最大堆与最小堆 最大堆的操作 最大堆的插入操作 最大堆的弹出操作 最大堆的C++代码实现 最小堆概念 最小堆的插入操作 最小堆的弹出操作 最小堆的C++代码实现 最大堆最小堆的应用 ...
- C++之最小堆、最大堆
#include<queue> #include<vector> std::priority_queue<int> big_heap; // 构造一个默认最大堆 s ...
- Leetcode215数组中第k大的数-最小堆
题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...
- 利用最小堆找出10亿个数中最大的10000个数
最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小 ...
- 数据结构最小堆C++实现
1.最小堆的结构: 左右子女的元素均小于等于父节点的元素,叫最小堆:左右子女的元素均大于等于父节点的元素,叫最大堆. 2.最小堆的建立过程如下图所示: 所有节点从上往下,从左往右一次标号0,1,2,. ...
- 最小堆以及最小优先队列的实现
最小堆的实现 什么是最小堆 构建最小堆 MIN_HEAPITY的实现 MIN_HEAPIFY的时间复杂度分析 BUILD_MIN_HEAP的实现 建最小堆的时间复杂度分析 什么是最小堆 最小堆从逻辑上 ...
最新文章
- Linux — OpenSSH 安全的远程连接
- 每日一皮:前程序员离职后没人想接的代码...
- 2012年寒假•青年基金【修改后发表】
- SQL结构化查询语言中的LIKE语句
- Python深浅拷贝教程-面试必问内容
- SAP Gateway 类型为multipart mixed的请求处理逻辑
- Java面试——Redis系列总结
- Redis集群之主从复制
- SpringBoot配置文件加密
- SpringSecurity系列(五) Spring Security 权限设计
- java 代码效率_提高代码性能效率总结(一)--Java
- PHPStorm/IntelliJ IDEA 设置SFTP
- vtuber面部捕捉工具_如何做一名VTuber?一个VUP就足够
- 杂志特稿:元宇宙将重塑我们的生活,我们要确保它变得更好
- flash 围棋_围棋怎么玩,最还有flash
- 机房动环监控解决方案!
- 九方财富更新招股书:上半年营收9亿 冲刺港股一年未果
- 成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
- RTX服务器信息存档,Rtx/RTX服务器端基本应用(一)
- 2553. 【NOIP2011模拟9.7】射命丸文 (Standard IO)
热门文章
- mysql运算结果放入表中_MySQL表1新增数据,计算开始、结束日期之间所有时间,插入到表2中...
- 《鸿蒙理论知识02》HarmonyOS开发平台和工具
- All your files have been encrypted
- php 接入微信 验证,PHP实现微信公众平台企业号验证接口
- 实战sqlmap绕过WAF
- React Native项目自动化打包发布
- web前端学习之ruby标记和rt/rp标记
- html笔记(一)html4+css2.0、css基础和属性、盒模型
- 数据库 日期格式操作
- Docker设置HTTP代理