排序算法-06堆排序(python实现)
生活随笔
收集整理的這篇文章主要介紹了
排序算法-06堆排序(python实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
堆排序
- 簡介
- 經典的選擇排序,實現利用了二叉樹這樣的數據結構。
-
算法實現
- 預備知識
- 堆是一棵順序存儲的完全二叉樹。(若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。)
- 完全二叉樹(左)與非完全二叉樹(右)
- 其中每個結點的值都不大于其孩子結點的關鍵字,這樣的堆稱為小頂堆;其中每個結點的值都不小于其孩子結點的關鍵字,這樣的堆稱為大頂堆。
- 順序存儲的二叉樹可以通過當前元素下標得到其父結點、兄弟結點、孩子結點,這里不做數學關系的推導了。
- 排序過程
- 根據數據構造二叉樹,調整二叉樹使之成為大頂堆(從最后一個節點開始,不斷修改,使得孩子總是不大于父親結點。)
- 每次排序交換第一個和最后一個元素,輸出最后一個值,剩余元素重新調整為大頂堆。重復上述步驟。
-
復雜度分析
排序名稱最好情況最壞情況平均情況 堆排序 O(nlogn) O(nlogn) O(nlogn) - 穩定性
- 該算法不穩定。
- 預備知識
具體可以查看我的github。?
總結
以上是生活随笔為你收集整理的排序算法-06堆排序(python实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析与挖掘理论-数据预处理
- 下一篇: 排序算法-07归并排序(python实现