最小堆make_heap(), pop_heap()和push_heap()
make_heap
在容器范围内,就地建堆,保证最大值在所给范围的最前面,其他值的位置不确定
pop_heap
将堆顶(所给范围的最前面)元素移动到所给范围的最后,并且将新的最大值置于所给范围的最前面
push_heap
当已建堆的容器范围内有新的元素插入末尾后,应当调用push_heap将该元素插入堆中。
1 #include<iostream> 2 #include<vector> 3 #include<ctime> 4 #include<deque> 5 #include<list> 6 #include<algorithm> 7 #include<queue> 8 #include<functional>//greater使用 9 10 using namespace std; 11 12 void print(vector<int> a) { 13 for (int i = 0; i < a.size(); i++) { 14 cout << a[i] << " "; 15 } 16 cout << endl; 17 } 18 19 int main() { 20 21 //堆排序算法(heapsort) 22 //make_heap(); 23 //push_heap() 24 //sort_heap() 25 //pop_heap() 26 //堆就是一种特殊的二叉树,最关心的就是根 27 //大根堆,小根堆 28 29 vector<int> ivec{3,4,5,6,7,5,6,7,8,9,1,2,3,4}; 30 print(ivec); 31 //向量里所有的数据变成一个堆 32 33 make_heap(ivec.begin(), ivec.end()); 34 print(ivec); 35 36 pop_heap(ivec.begin(), ivec.end());//最大的数据取走,但是并没s有删除 37 //把最大的数据放在结尾,剩下的元素排成一个堆 38 print(ivec); 39 ivec.pop_back(); 40 //push_heap 使用首先要先把数据加在向量里 41 42 ivec.push_back(17); 43 make_heap(ivec.begin(), ivec.end()); 44 print(ivec); 45 46 //sort_heap 把堆变成不是堆,普通的排序 47 sort_heap(ivec.begin(), ivec.end()); 48 print(ivec); 49 50 system("pause"); 51 }