使用STL中的make_heap, push_heap, pop_heap, sort_heap进行对操作不用每次都自己写建立堆,调整堆和堆排序的代码了!
make_heap():
根据输入的迭代器,把其范围内的元素建立堆,默认是大顶堆(less<Type>())
push_heap():
末尾添加一个元素,重新调整堆,该算法是在已经满足堆序的情况下添加元素,默认是大顶堆(less<Type>())
pop_heap();
把堆顶元素和最后一个元素交换,然后调整前N-1一个元素称为堆,默认是大顶堆(less<Type>())
sort_heap():
进行堆排序,每次把堆顶元素和当前堆最后一个元素交换,然后调整堆直到剩下一个元素为止,默认是大顶堆(less<Type>())
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//下面建立的是小顶堆
int main()
{
int ia[9]={0,1,2,3,4,8,9,3,5};
vector<int> ivec(ia,ia+9);
make_heap(ivec.begin(),ivec.end(), greater<int>());
for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";
cout<<endl;
ivec.push_back(7);
push_heap(ivec.begin(),ivec.end(), greater<int>());//这里可以用make_heap替换。
for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";
cout<<endl;
pop_heap(ivec.begin(),ivec.end(), greater<int>());
cout<<ivec.back()<<endl;
ivec.pop_back();
for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";
cout<<endl;
sort_heap(ivec.begin(),ivec.end(), greater<int>());
for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";
cout<<endl;
return 0;
}