對歸併、堆排、快排的一些總結。

這三個算法的理論時間複雜度都是nlogn,但是區別還是很大的。


這三個算法裏,實際效率最低的是堆排序,因爲在每次調整大根堆的時候,都把底層元素交換到了根,然後再調整,而底層元素又不可能大於原根元素的兩個孩子節點,因此非等概率調整,做了很多次無效交換,因此實際效率最低。


歸併排序時間效率最高,並且穩定,因爲歸併排序每次都把序列二等分,做等概率劃分,最後繼續劃分,這樣就能達到最優劃分策略,即logn次劃分,每個元素最多進行logn次比較,n個元素也就是nlogn,並且在合併的時候不破壞現有順序,因此是穩定排序,但由於藉助了logn個遞歸棧和n個臨時存儲空間,因此他的可適用性反而不如快排。


快排效率上是不如歸併的,而且不穩定,但是思想和歸併一樣,都是對序列不斷做劃分,然後排序,劃分策略未必就是最優劃分策略,但是可以讓他接近最優劃分策略,這就涉及到了一個選擇樞紐元的問題,比較常見的方法是用三數中值法,並且由於是就地排序,不許靠考慮額外空間開銷,因此快排是綜合最好的排序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章