首先來看完全二叉樹的定義:
若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。而將一維陣列視為完全二叉樹書得到的即為堆。
堆效率極高,像十分常用的
排序演算法、
dijkstra
演算法、prim
演算法等都要用堆才能優化,幾乎每次都要考到的
二叉排序樹
的效率也要借助
平衡性來提高,而平衡性基於完全二叉樹。
stl中與堆相關的4個函式——建立堆make_heap(),在堆中新增資料push_heap(),在堆中刪除資料pop_heap()和堆排序sort_heap():
標頭檔案 #include
下面的_first與_last為可以隨機訪問的迭代器(指標),_comp為比較函式(仿函式),其規則——如果函式的第乙個引數小於第二個引數應返回true,否則返回false。
建立堆
make_heap(_first, _last, _comp)
預設是建立最大堆的。對int型別,可以在第三個引數傳入greater()得到最小堆。
在堆中新增資料
push_heap (_first, _last)
要先在容器中加入資料,再呼叫push_heap ()
在堆中刪除資料
pop_heap(_first, _last)
要先呼叫pop_heap()再在容器中刪除資料
堆排序
sort_heap(_first, _last)
排序之後就不再是乙個合法的heap了
#include #include #include #include using namespace std;
void printfvectorint(vector&vet)
int main()
STL中的堆操作
堆在我們做演算法時應該有映像吧,分為大根堆,小根堆。stl中的其實是對堆有實現的,使得我們可以直接拿來用。相關的函式是make heap push heap pop heap sort heap make heap make heap first,end,cmp 引數有3個,第乙個為堆建立堆的第乙個...
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆,新增資料,刪除資料,堆排序 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數小於第二個引數應返回true,否則返回false。建立堆 make heap fir...
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆make heap 在堆中新增資料push heap 在堆中刪除資料pop heap 和堆排序sort heap 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數...