完全二叉樹比較適合用陣列來儲存!
堆化非常簡單,就是順著節點所在的路徑,向上或者向下,對比,然後交換。
從堆的定義的第二條中,任何節點的值都大於等於(或小於等於)子樹節點的值,我們可以發現,堆頂元素儲存的就是堆中資料的最大值或者最小值 。
把最後乙個節點放到堆頂,然後利用同樣的父子節點對比方法。對於不滿足父子節點大小關係的,互換兩個節點,並且重複進行這個過程,直到父子節點之間滿足大小關係為止。
借助於堆這種資料結構實現的排序演算法,就叫作堆排序。
時間複雜度非常穩定,是o(nlogn),並且它還是原地排序演算法。
具體實現參考堆排序
優先順序佇列,佇列最大的特性就是先進先出,在優先順序佇列中,資料的出隊順序不是先進先出,而是按照優先順序來,優先順序最高的,最先出隊 。
往優先順序佇列中插入乙個元素,就相當於往堆中插入乙個元素;從優先順序佇列中取出優先順序最高的元素,就相當於取出堆頂元素。
具體實現參考堆應用
學習筆記 堆
heap 堆 堆是一種建立在樹上的結構,是一種完全二叉樹型的資料結構,目前了解到的應用是堆排序,然後用於實現優先佇列。堆的特點是,子結點一定比父結點大或者小於父結點。其中,所有子結點都小於父結點的堆是最大二叉堆,子結點小於父結點的是最小二叉堆。堆的核心是heapify,維護堆合法性的演算法 後續談到...
學習筆記 堆
include include typedef struct node minheap 初始化乙個堆 void create minheap h,int maxsize bool isfull minheap h 往堆裡插入資料,其實可以直接在主程式裡輸入就行了 void insert minhea...
堆 學習筆記
完全二叉樹形式 具有單調性 可以用來求最值 也可以用來求最值 大根堆 根節點最大 小根堆 根節點最小 借助vector來建堆 include using namespace std int main return 0 make heap a.begin a.end cmp bool cmp int ...