博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL_算法_Heap算法(堆排)(精)
阅读量:6800 次
发布时间:2019-06-26

本文共 4441 字,大约阅读时间需要 14 分钟。

C++ Primer 学习中。

 

简单记录下我的学习过程 (代码为主)

/*****************************************

STL-算法--Heap算法
堆排序算法 (heapsort)
make_heap()         //把容器内的数据做堆排序
push_heap()         //向堆内放入元素
pop_heap()          //删除堆顶元素
sort_heap()         //把堆排还原成普通排序
*****************************************/
/**----------------------------------------------------------------------------------
make_heap(b,e)                                  9
make_heap(b,e,cp)                      /                  \
push_heap(b,e)                        8                    6
push_heap(b,e,cp)                /         \          /          \
pop_heap(b,e)                   7           7        5            5
pop_heap(b,e,cp)              /   \       /   \    /   \        /
sort_heap(b,e)               3     6     4     1  2     3      4
sort_heap(b,e,cp)
----------------------------------------------------------------------------------**/

/**------http://blog.csdn.net/u010579068------**/#include
#include
#include
#include
#include
#include
#include
using namespace std;/*****************************************STL-算法--Heap算法堆排序算法 (heapsort)make_heap() //把容器内的数据做堆排序push_heap() //向堆内放入元素pop_heap() //删除堆顶元素sort_heap() //把堆排还原成普通排序*****************************************//**----------------------------------------------------------------------------------make_heap(b,e) 9make_heap(b,e,cp) / \push_heap(b,e) 8 6push_heap(b,e,cp) / \ / \pop_heap(b,e) 7 7 5 5pop_heap(b,e,cp) / \ / \ / \ /sort_heap(b,e) 3 6 4 1 2 3 4sort_heap(b,e,cp)----------------------------------------------------------------------------------**//*************************************************************************************std::make_heap 全部排序容器适用 algorithm--------------------------------------------------------------------------------------template
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );template
void make_heap ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );//eg:*************************************************************************************//*************************************************************************************std::push_heap 全部排序容器适用 algorithm--------------------------------------------------------------------------------------template
void push_heap ( RandomAccessIterator first, RandomAccessIterator last );template
void push_heap ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );//eg:*************************************************************************************//*************************************************************************************std::pop_heap 全部排序容器适用 algorithm--------------------------------------------------------------------------------------template
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last );template
void pop_heap ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );//eg:*************************************************************************************//*************************************************************************************std::sort_heap 全部排序容器适用 algorithm--------------------------------------------------------------------------------------template
void sort_heap ( RandomAccessIterator first, RandomAccessIterator last );template
void sort_heap ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );//eg:*************************************************************************************/template
void Print(T& V){ typename T::iterator iter=V.begin(); while(iter != V.end()) { cout<<*iter++<<" "; } cout<
ivec; for(int i=3;i<=7;++i) ivec.push_back(i); for(int i=5;i<=9;++i) ivec.push_back(i); for(int i=1;i<=4;++i) ivec.push_back(i); cout<<"原数据:"; Print(ivec); make_heap(ivec.begin(),ivec.end());//做最大堆排序,事实上还在vector容器内 cout<<"堆排后:"; Print(ivec); pop_heap(ivec.begin(),ivec.end());//删除最大堆,事实上是把数据放到最后了! cout<<"删除后:"; Print(ivec); ivec.pop_back(); pop_heap(ivec.begin(),ivec.end());//删除最大堆,事实上是把数据放到最后了。 cout<<"删除后:"; Print(ivec); ivec.pop_back(); ivec.push_back(15); cout<<"增加数据后:"; Print(ivec); push_heap(ivec.begin(),ivec.end());//放入最大堆,事实上是把新增加的数据。依照堆排增加堆内 cout<<"把最后一个数增加堆里:\n"; Print(ivec); sort_heap(ivec.begin(),ivec.end());//把堆排顺序。还原成一般的排序算法 cout<<"还原堆排顺序:\n"; Print(ivec); return 0;}

/*****************************************//Output:原数据:3 4 5 6 7 5 6 7 8 9 1 2 3 4堆排后:9 8 6 7 7 5 5 3 6 4 1 2 3 4删除后:8 7 6 7 4 5 5 3 6 4 1 2 3 9删除后:7 7 6 6 4 5 5 3 3 4 1 2 8加入数据后:7 7 6 6 4 5 5 3 3 4 1 2 15把最后一个数加入堆里:15 7 7 6 4 6 5 3 3 4 1 2 5还原堆排顺序:1 2 3 3 4 4 5 5 6 6 7 7 15*****************************************/

转载于:https://www.cnblogs.com/clnchanpin/p/7053520.html

你可能感兴趣的文章
Android精品源码,微信红包动画动画效果库输入框风格新闻客户端组件化方案...
查看>>
CSS相关文章
查看>>
Spark User-guide Summary - Streaming
查看>>
认识RESTful
查看>>
【呆萌の整理】Linux入门知识点整理之系统、编程
查看>>
tinyscrollbar锁滚动问题引出对wheel事件的探索
查看>>
IDE下的MapReduce开发
查看>>
JAVA IO源码学习系列一(InputStream)
查看>>
Mysql 配置的工作原理
查看>>
JS PopUnder 原理研究:初探
查看>>
前端面试回顾(3)---事件绑定及相关兼容性问题
查看>>
深入认识vue-cli:能做的不仅仅是初始化vue工程
查看>>
在 APICloud 项目中使用 Webpack
查看>>
CSS 中的行
查看>>
调试Go语言的核心转储(Core Dumps)
查看>>
[译]HTML&CSS Lesson4: 盒子模型
查看>>
手机移动端 用 rem 作单位时要注意的问题
查看>>
安卓新建项目 - 收藏集 - 掘金
查看>>
js基础 数组与字符串
查看>>
node异常总结
查看>>