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
延伸文章資訊
- 1Python實作排序演算法-堆積排序法(Heap Sort)
Heap sort是一種在所以有情況下的時間複雜度都能維持在N log N的排序演算法,算一種效率相當好的排序演算法,我們會以Python實作此演算法。
- 2[ Data Structure ] 堆(Heap) @ 我的程式學習路 - 痞客邦
最小堆(min heap). ○ 堆排序(Heapsort). 值得注意一點就是在C語言中實做堆時一般皆是用一維陣列解決. 另外遇到"優先隊列"(Priority Queue)問題就是用 ...
- 3Heap (堆) — wdv4758h-notes latest 說明文件
Heap 常被作為Priority Queue (一種Abstract Data Type)的實作方式。 而一個Heap 常見的實作為Binary Heap,它的樹為Complete Binar...
- 4堆積排序Heapsort
一般來說heapsort 常用實作後者。 Heapify 是指將序列修正至符合heap ordering 的序列。給定一個元素,假定其為非法的heap order,而該元素之後的subtree ...
- 5用Heap 實作Priority Queue - 朝陽科技大學
所謂 heap property (或稱 heap condition ) 是指每個node 內的資料比它左右兩側child nodes 內的資料都小(但左右兩child nodes 之間並無一...