Python實作排序演算法-堆積排序法(Heap Sort)
文章推薦指數: 80 %
Heap sort是一種在所以有情況下的時間複雜度都能維持在N log N的排序演算法,算一種效率相當好的排序演算法,我們會以Python實作此演算法。
Skiptocontent
Heapsort是一種在所以有情況下的時間複雜度都能維持在NlogN的排序演算法,算一種效率相當好的排序演算法,我們會以Python實作此演算法。
演算法分析
簡單來說,此演算法主要可分解為以下幾個步驟
建構(Heapify):將陣列轉換成Maxheap或Minheap調整(Adjust):進行排序交換節點:將root的值與最後一個節點交換刪除節點:將最後一個節點刪除,因為已經排序完成
Maxheap與Minheap的差別在於Maxheap就是父節點會大於或等於子節點,Minheap則相反,應用上,如果今天要遞增排序,就會使用Maxheap,反之,則會使用Minheap。
Maxheap與Minheap
建構(Heapify)
簡單來說就是將要排序的陣列轉換成為完整二元樹(completebinarytree)
我們假設要來排序此陣列:[5,10,2,7,1]
將其轉換成二元樹
將陣列轉換成完整二元樹
調整(Adjust)
調整即是將完整二元樹轉換成Maxheap,簡單來說就是要將父節點之值>=子節點之值,因此我們可以從中間的節點往上開始檢查,每當父值=子值時就停止,再往上一個找,直到到達根部(root),就代表maxheap建構完成。
根據我們剛剛的排序陣列:[5,10,2,7,1],有5個元素,因此會從5/2也就是第2個的位置開始找,因為第2個位置之後的值就沒有子值了,代表沒有比較的必要,因此可以省略不找。
從上圖,我們可以看到父值>子值們,因此不需調整,可以再往2上一個找,也就是第1個值(root)。
根據上圖,我們可以看到父值5
延伸文章資訊
- 1資料結構大便當: Binary Heap
好的,我們來把手弄髒吧! 實作Heap & Heap Sort 主要分兩個部分:. build a heap from an array; do heap sort - pop root
- 2用Heap 實作Priority Queue - 朝陽科技大學
所謂 heap property (或稱 heap condition ) 是指每個node 內的資料比它左右兩側child nodes 內的資料都小(但左右兩child nodes 之間並無一...
- 3【Day18】[資料結構]-堆積Heap-實作 - iT 邦幫忙
堆積(Heap)建立的方法(以最大堆積實作) maxHeapify: 最大堆積化push: 新增元素pop: 刪除特定元素popRoot: 刪除根節點(最大值) getRoot: 查看根節點(最...
- 41.4.2 Heap Tree - 資料結構&演算法筆記 - GitBook
一個堆積樹必定為完整二元樹(complete binary tree), 且通常會用陣列來實作. 所以大概長得像這樣(Min heap):.
- 5Heap (堆) — wdv4758h-notes latest 說明文件
Heap 常被作為Priority Queue (一種Abstract Data Type)的實作方式。 而一個Heap 常見的實作為Binary Heap,它的樹為Complete Binar...