堆排序算法(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;
}