STL中heap演算法(堆演算法)

2021-09-06 16:46:56 字數 1533 閱讀 3060



①push_heap演算法

以下是push_heap演算法的實現細節。該函式接收兩個迭代器,用來表現乙個heap底部容器(vector)的頭尾,而且新元素已經插入究竟部的最尾端。

template

inline void push_heap(randomaccessiterator first,randomaccessiterator last)

template

inline void _push_heap_aux(randomaccessiterator first,randomaccessiterator last,

distance*,t*)

template

void _push_heap(randomaccessiterator first,distance holeindex,distance topindex,t value)

template

inline void _pop_heap_aux(randomaccessiterator first,randomaccessiterator last,t*)

template

inline void _pop_heap(randomaccessiterator first,randomaccessiterator last,randomaccessiterator result,

t value,distance*)

template

void _adjust_heap(randomaccessiterator first,distance holeindex,distance len,t value)

if (secondchild == len)

_push_heap(first,holeindex,topindex,value);

}注意:pop_heap之後,最大元素僅僅是被置於底部容器的最尾端,尚未被取走。假設要取其值,可使用底部容器(vector)所提供的back()操作函式。假設要移除它,可使用底部容器(vector)所提供的pop_back()操作函式。

③sort_heap演算法

既然每次pop_heap可獲得heap中鍵值最大的元素,假設持續對整個heap做pop_heap操作,每次將操作範圍從後向前縮減乙個元素(由於pop_heap會把鍵值最大的元素放在底部容器的最尾端),當整個程式執行完成時,我們便有了乙個遞增序列。

template

void sort_heap(randomaccessiterator first,randomaccessiterator last)

④make_heap演算法

這個演算法用來將一段現有的資料轉化為乙個heap。

template

inline void make_heap(randomaccessiterator first,randomaccessiterator last)

template

void _make_heap(randomaccessiterator first,randomaccessiterator last,t*,distance*)}

堆 heap 排序演算法

堆排序演算法是複雜的排序演算法,是不穩定的排序演算法。1 堆排序的基本思想 堆排序定義 n個有序列a1,a2,an成為堆,有下面兩種不同型別的堆。大根堆 所有子節點都大於其父節點,即ai a2i且ai a2i 1。小根堆 所有子節點都小於其父節點,即ai a2i且ai a2i 1。若將此序列所儲存的...

STL中堆 heap 函式的使用

所需標頭檔案 algorithm 語言環境 c 一般只用到四個make heap sort heap pop heap push heap。首先這四個函式的引數都一樣 first 首元素的位址 last 尾元素的位址 cmp比較函式 返回值都為void 這四個函式都是建立在陣列的基礎上的 cmp引數...

STL系列之四 heap 堆

下面再介紹stl中與堆相關的4個函式 建立堆,新增資料,刪除資料,堆排序 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數小於第二個引數應返回true,否則返回false。建立堆 make heap fir...