C 標準庫 heap演算法

2021-06-27 19:47:36 字數 1625 閱讀 7567

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開始...