C ++
make_heap(),
pop_heap(),
push_heap(),
sort_heap(),
is_heap();
is_heap() :
原型如下 :
1.
2.
make_heap() :
1.
2.
void make_heap( random_access_iterator start, random_access_iterator end, StrictWeakOrdering cmp );
->当使用了 版本2时, 系统使用 用户定义的 cmp 函数来构建一个堆
1.
2.
原型如下 :
1.
sort_heap() :
原型如下 :
2.
->
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
int main()
{
const int vectorsize=8;
typedef vector<int> IntVector;
typedef IntVector::iterator IntVectorIt;
IntVector Numbers(vectorsize);
IntVectorIt it;
Numbers[0]=4;
Numbers[1]=10;
Numbers[2]=70;
Numbers[3]=10;
Numbers[4]=30;
Numbers[5]=69;
Numbers[6]=96;
Numbers[7]=100;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it<<" "; //4 10 70 10 30 69 96 100
cout<<endl;
make_heap(Numbers.begin(), Numbers.end()) ;
cout << "After calling make_heap\n" << endl ;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ; // 100 30 96 10 4 69 70 10
cout<< endl ;
// sort_heap(Numbers.begin(), Numbers.end()) ;
// cout << "After calling sort_heap\n" << endl ;
// for(it = Numbers.begin(); it != Numbers.end(); it++)
// cout << *it << " " ;
// cout << endl ;
make_heap(Numbers.begin(), Numbers.end()) ; //一定要调用,因为排序后堆的结构已经被破坏
Numbers.push_back(7) ;
push_heap(Numbers.begin(), Numbers.end()) ;
make_heap(Numbers.begin(), Numbers.end()) ;
cout << "After calling push_heap and make_heap\n" << endl ;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ; cout << endl ; //100 30 96 10 4 69 70 10 7
pop_heap(Numbers.begin(), Numbers.end()) ;
cout << "After calling pop_heap\n" << endl ;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ; cout << endl ; //96 30 70 10 4 69 7 10 100
}
把这几句加上
sort_heap(Numbers.begin(), Numbers.end()) ;
cout << "After calling sort_heap\n" << endl ;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ;
//4 10 70 10 30 69 96 100
// 100 30 96 10 4 69 70 10
//4 10 10 30 69 70 96 100
//100 69 96 30 4 70 10 10 7
//96 69 70 30 4 7 10 10 100
若利用STL中的堆函数来实现堆排序,则代码十分简洁。以下是代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
int main()
{
const int vectorsize=8;
typedef vector<int> IntVector;
typedef IntVector::iterator IntVectorIt;
IntVector Numbers(vectorsize);
IntVectorIt it;
Numbers[0]=4;
Numbers[1]=10;
Numbers[2]=70;
Numbers[3]=10;
Numbers[4]=30;
Numbers[5]=69;
Numbers[6]=96;
Numbers[7]=100;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it<<" ";
cout<<endl;
make_heap(Numbers.begin(), Numbers.end()) ;
cout << "After calling make_heap\n" << endl ;
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ;
cout<< endl ;
for(it = Numbers.end(); it!=Numbers.begin(); it--)
pop_heap(Numbers.begin(), it);
cout << "after 堆排序:\n";
for(it = Numbers.begin(); it != Numbers.end(); it++)
cout << *it << " " ;
// 100 30 96 10 4 69 70 10
//4 10 10 30 69 70 96 100