這一章主要講了兩個點:1.堆排序。2.堆排序的應用(優先順序佇列)
堆
堆是一種完全二叉樹(不理解)。反正是一種樹狀的資料結構了吧。有幾種操作。
求左子節點(2i),求右子節點(2i+1),求父節點(i/2)下取整。
保持最大堆結構(max-heapfiy)
建堆(building a heap)
然後這些屬性就可以實現堆排序了
書上的偉大碼比較容易看懂,然後自己再畫一畫就可以理解了。
這裡有些心得:一開始的時候覺得偽**比較難懂。還不如源**咧。但是現在我不這麼覺得了。。這個就是堆排序的一種用法吧。
就像是如果有一堆的任務。就給每乙個任務乙個優先順序(關鍵字)。你可以用關鍵字很容易找出你想找的任務。
有一下幾種操作:
heap-maximum(a) 返回最大值
heap-extract-max(a) 返回最大值並刪除
heap-increase-key(a,i,key) 將i的關鍵字值程式設計key
heap-insert(a,key) 將key插入
偽**真是好東西,越看越喜歡。我要學一學怎麼在部落格上寫偽**了。
演算法導論學習筆記 第六章 堆排序
第六章 堆排序總結 這章主要講了堆 建堆 堆排序 優先順序佇列等。1.堆 堆可以被視為一顆完全二叉樹,底層用陣列實現。length a 陣列中的元素個數 heap size a 存放在a 中的堆的元素個數 樹的根a 1 給定某個結點的下標i 父節點parent i i 2 左節點left i 2i ...
《演算法導論》第六章 堆排序 筆記
堆排序不同於歸併排序的是,堆排序具有和插入排序一樣的空間原址性,任何時候都只需要常數個額外的元素空間儲存臨時資料。因此,堆排序是集合了插入排序和歸併排序兩種演算法優點的排序方法。二叉 堆是乙個陣列,它可以被看成乙個近似的完全二叉樹。樹上的每乙個結點對應陣列中的乙個元素,除了最底層,該樹是完全充滿的,...
演算法導論 第六章《堆排序》
本章開始介紹了堆的基本概念,然後引入最大堆和最小堆的概念。全章採用最大堆來介紹堆的操作,兩個重要的操作是調整最大堆和建立最大堆,接著著兩個操作引進了堆排序,最後介紹了採用堆實現優先順序佇列。二叉 堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。除了最底層外,該樹是完全充滿的,而且是從左到右填充...