C++實現排序算法的總結

快速排序

冒泡排序

插入排序

希爾排序

選擇排序

堆排序

索引最大堆

歸併排序

外部歸併排序

桶排序

十大排序動畫參考鏈接:https://www.cnblogs.com/onepixel/articles/7674659.html


 比較類排序:通過比較來決定元素間的相對次序,由於其時間複雜度不能突破O(nlogn),因此也稱爲非線性時間比較類排序。

非比較類排序:不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間運行,因此也稱爲線性時間非比較類排序。


 


 

插入排序,在已經有序的元素中排序,則時間複雜度可以達到O(n),所以每個排序,面對不同的數據,可能會有不一樣的時間複雜度,我們能夠給出的就是,平均時間複雜度

總體而言,快速相對來說是比較快的排序算法

原地排序:直接可以在數組上完成排序,不需要再另外開闢空間,所以一些系統對空間相對敏感,則不適合歸併排序

快速排序也是原地排序,但是它是利用遞歸實現,每次遞歸都需要佔用棧空間,所以額外空間爲O(logn),歸併排序其實也是遞歸實現,它的額外空間應該是O(n+logn)但是logn 相對n來說可以忽略不計

對於快速排序的穩定性,首先需要隨機選擇基準點,很有可能將一批中相等的元素選到了前面,而堆排序,在組建堆的時候,很可能被打亂。

不穩定的排序算法也可以通過自定義函數,使得排序算法穩定(比如重載<比較符)

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