STL_算法(30)_Heap算法

来源:互联网 发布:鼠标垫推荐知乎 编辑:程序博客网 时间:2024/05/08 15:37

堆排序算法(heapsort)

make_heap()

push_heap()

pop_heap()

sort_heap()

(大根堆)

从堆中取一个数的话,始终是取得是最大的。

反之就是小根堆。


#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){vector<int> 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);for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;make_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;// 取出最大,把最大数放到最后,前面的几个形成新的堆pop_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;ivec.pop_back();// 删除最后一个元素for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;system("pause");//return 0;}



#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){vector<int> 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);for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;make_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;// 取出最大,把最大数放到最后,前面的几个形成新的堆pop_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;ivec.pop_back();// 删除最后一个元素for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;// 向堆中插入元素,首先先把数据插入到向量里ivec.push_back(17);for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;// 将所有数据新建一个堆push_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;// 把堆变成普通的排序sort_heap(ivec.begin(), ivec.end());for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)cout<<*iter<<' ';cout<<endl;system("pause");//return 0;}



















0 0
原创粉丝点击