Algorithm中Heap
来源:互联网 发布:网络文学作品论文 编辑:程序博客网 时间:2024/06/08 16:12
介绍algorithm头文件中根的相关函数
make_heap(首位置, 尾位置+1, 可选的cmp函数); -> 构造堆
push_heap(首位置, 尾位置+1, 可选的cmp函数); -> 添加元素到堆中
pop_heap(首位置, 尾位置+1, 可选的cmp函数); -> 从堆中移出元素
总结:
想要进行堆操作,前提必须是“已构建了堆”。
如果在使用时碰到数据混乱,那么很有可能就是没有make_heap。
需要注意的是make_heap后进行pop_heap操作,那么这个根比原来的"影响范围"就小了,
假设进行上述的"排序"操作,那么这些数据就不再是堆。
想要另行操作只能重新make_heap。
make_heap(首位置, 尾位置+1, 可选的cmp函数); -> 构造堆
push_heap(首位置, 尾位置+1, 可选的cmp函数); -> 添加元素到堆中
pop_heap(首位置, 尾位置+1, 可选的cmp函数); -> 从堆中移出元素
sort_heap(首位置, 尾位置+1, 可选的cmp函数); -> 整个堆进行排序
#include<algorithm>#include<cstdio>using namespace std;bool inc_cmp(int a,int b){ return a > b; }// 可以理解为:左a右b,当a>b的时候,双方交换位置,// 所以上式这个cmp意为从小到大(排序)。 bool des_cmp(int a, int b){ return a < b; }int num[10]={3, 1, 2, 5, 6, 4};int main(){ make_heap(num, num+6);//构造一个堆,默认是大根堆。 // 上式等价于make_heap(&num[0], &num[6]);可以看到,区间是[0, 7), // 即参数中的末尾是真真实末尾的后一个位置。 // 可以修改为make_heap(num, num+6, inc_cmp); 此时为小根堆。 // 插入一个元素到先前创建的堆中,插进来的数将调整到合适的位置。 num[6] = 5; push_heap(num, num+7); // pop_heap将堆顶数据移动到末尾位置,然后将剩余数据重新构造堆。 // 其中一个易于理解的例子就是,不断将大根堆堆顶移到末尾, // 以此模拟从小到大排序。 /* ---------- */ printf("before: "); for(int i = 0; i < 7; i++) printf("%d ", num[i]); printf("\n"); for(int i = 7; i >= 1; i--) // 共7个数,交换到最后第二个数为止。 { pop_heap(num, num+i); } printf("after : "); for(int i = 0; i < 7; i++) printf("%d ", num[i]); printf("\n"); /* ---------- */ //sort_heap,堆排序,因为前面都pop_heap掉了,所以得重新make_heap make_heap(num, num + 6); sort_heap(num, num+6, des_cmp); for(int i = 0; i < 7; i++) printf("%d ", num[i]); printf("\n"); return 0;}
总结:
想要进行堆操作,前提必须是“已构建了堆”。
如果在使用时碰到数据混乱,那么很有可能就是没有make_heap。
需要注意的是make_heap后进行pop_heap操作,那么这个根比原来的"影响范围"就小了,
假设进行上述的"排序"操作,那么这些数据就不再是堆。
想要另行操作只能重新make_heap。
1 0
- Algorithm中Heap
- [算法浅析] Algorithm中Heap用法小结
- Sorting Algorithm-Heap Sort
- [Data Structure and Algorithm]--Heap
- heapq( Heap queue algorithm)库
- [the summarization of algorithm]Heap and Heapsort
- Programming Question-5-Dijkstra Algorithm via Min-Heap (including Notes)
- heap sort algorithm 堆排序算法 java实现
- 全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)
- STL中Algorithm
- STL: <algorithm>中 sort()
- c++ STL中Algorithm
- algorithm中for_each用法
- algorithm中sort函数
- algorithm 中advance函数
- STL中algorithm
- STL中heap学习
- <algorithm> 中sort的使用
- 蓝桥杯 摆动序列 dp
- 一种独特的logistic定义 lift logistic变量选择法 2016.07.29回顾
- dynatrace purepath数据转换到数据库
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- B - Rescue
- Algorithm中Heap
- Linux兴趣小组暑假留校第四次讲座总结
- 存边sap
- 贪心算法的学习
- Picasso-简单使用
- Android Studio中如何设置注释模板(针对file)
- eclipse安装jetty插件、maven项目测试
- 改变帧大小记录
- 常用JAVA集合框架(Collection、List、Set、Map)