heap演算法
就排序而言,heap是一種特別的元素組織方式,應用於heap排序法。heap可被視為乙個序列式群集實作而成的二叉樹,具有兩大性質:
1.第乙個元素總是最大;
2.總是能夠在對數時間內增加或移除乙個元素。
stl提供四種演算法:
1.make_heap() 將區間內的元素轉換為heap
2.push_heap() 對著heap增加乙個元素
3.pop_heap() 對著heap取出下乙個元素
4.sort_heap() 將heap轉化為乙個已序序列
(1)make_heap():
make_heap(beg,end)
make_heap(beg,end,op)
兩種形式都將區間[beg,end)內的元素轉換為heap;
op是乙個可有可無的二元判斷,被視為排序準則:
op(elem1,elem2)
只有在多於乙個元素的情況下,才有必要使用這些函式來處理heap,如果只有單一元素,那麼它自動就形成乙個heap;
複雜度:線性;
(2)push_heap():
push_heap(beg,end)
push_heap(beg,end,op)
兩種形式都將end之前的最後乙個元素加入原本就是個heap的[beg,end-1)區間內,使整個區間[beg,end)成為乙個heap;
op是乙個可有可無的二元判斷式,被視為排序準則:
op(elem1,elem2)
呼叫者必須保證,進入函式時,區間[beg,end-1)內的元素原本便已形成乙個heap(在相同的排序準則下),而新元素緊跟其後;
複雜度:對數
(3)pop_heap():
pop_heap(beg,end)
pop_heap(beg,end,op)
以上兩種形式都將heap[beg,end)內的最高元素,也就是第乙個元素,移到最後位置,並將剩餘區間[beg,end-1)內的元素組著起來,成為乙個新的heap;
op是個可有可無的二元判斷,被當作排序準則:
op(elem1,elem2)
呼叫者必須保證,進入函式時,區間[beg,end)內的元素原本便已形成乙個heap(在相同的排序準則下);
複雜度:對數;
(4)sort_heap():
sort_heap(beg,end)
sort_heap(beg,end,op)
以上兩種形式都可以將heap[beg,end)轉換為乙個已序序列;
op是個可有可無的二元判斷式,被視為排序準則:
op(elem1,elem2)
注意,此演算法一旦結束,該區間就不再是heap了;
呼叫者必須保證,進入函式時,區間[beg,end)內的元素原本便已形成乙個heap(在相同的排序準則下);
複雜度:nlogn
**示例:
//haep
#include"fuzhu.h"
using namespace std;
int main()
執行結果:
C 標準庫演算法
在遵循 不重複製造輪子 的原則下,對於一些基本演算法,要盡可能地使用標準庫提供的函式 在中定義 一是節省時間,二是標準實現在演算法效能上 我在此簡要回顧一下標準庫中都提供了哪些常見的演算法。1 基本數學相關 max t1,t2 和min t1,t2 返回t1和t2中的較大 較小者。max eleme...
C 演算法標準庫常用演算法
1.演算法 找到某個值,或者某個謂詞判斷 find find if 計數某個值,或者某個謂詞判斷 count count if 查詢子串行 search 查詢最值 min element 2.隨機數 引擎 分布 例程 include include using namespace std int m...
C 標準庫常用演算法
find beg,end,val 根據equal操作符,循序查詢 first,last 內所有的元素,找出第乙個匹配 等同條件者 如果找到,就返回乙個指向匹配元素的迭代器,否者返回迭代器end equal beg1,end1,beg2 確定兩個序列是否相等。如果輸入範圍中的每個元素都與從beg2開始...