堆排序
(二叉)堆是一個數組,它可以被看成一個近似的完全二叉樹。樹上的每一個結點對應數組中的一個元素。除了最底層外,該樹是完全充滿的,而且是從左像右填充。
在堆排序中,我們使用的是最大堆。最小堆通常用于構造優先隊列。
在最大堆中,最大堆性質是指除了根以外的所有結點i都要滿足:A[Panrent(i)]≥a[i],也就是說,某個結點的值至多與其父結點一樣大。堆中的最大元素存放在根結點中。
把堆看成一棵樹,一個堆中的結點的高度就為該結點到葉結點最長簡單路徑上邊的數目。
優先隊列是一種用來維護一組元素構成的集合S的數據結構,其中的每一個元素都有一個相關的值,稱為關鍵字(key)。一個最大優先隊列支持以下操作:
Insert(S,x):把元素x插入集合S中。這一操作等價于S=S∪{x}。
Maximum(S):返回S中具有最大鍵字的元素。
Extract-Max(S):去掉并返回S中的具有最大鍵字的元素。
Increase-Key(S,x,k):將元素x的關鍵字值增加到k,k的值不小于x的原關鍵字。