函数说明
参数都是一样的:
make_heap(first ,last)
make_heap(first ,last, cmpObject)
将[first, last)
范围进行堆排序,默认使用less<int>
, 即最大元素放在第一个。
pop_heap(first ,last)
pop_heap(first ,last, cmpObject)
将front(即第一个最大元素)移动到end的前部,同时将剩下的元素重新构造成(堆排序)一个新的heap。
push_heap(first ,last)
push_heap(first ,last, cmpObject)
对刚插入的(尾部)元素做堆排序。
sort_heap(first ,last)
sort_heap(first ,last, cmpObject)
将一个堆做排序,最终成为一个有序的系列,可以看到sort_heap时,必须先是一个堆(两个特性:1、最大元素在第一个 2、添加或者删除元素以对数时间),因此必须先做一次make_heap.
Sample 1
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
1 | class Solution { |
Sample 2
来自:http://www.cnblogs.com/coderyoyo/archive/2011/01/21/stl_heap.html
1 |
|
Ref.
- 堆算法(make_heap,push_heap,pop_heap, sort_heap)
- 剑指Offer
- Cplusplus.com