您的位置:首页 > 其它

STL_算法(30)_Heap算法

2016-10-07 20:00 183 查看
堆排序算法(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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: