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