常用排序彙總

1.穩定性比較
插入排序、冒泡排序、二叉樹排序、二路歸併排序及其他線形排序是穩定的
選擇排序、希爾排序、快速排序、堆排序是不穩定的

2.時間複雜性比較

排序方法 平均情況 最好情況 最壞情況
歸併排序 O(nlogn) O(nlogn) O(nlogn)
基數排序 O(n) O(n) O(n)
快速排序 O(nlogn) O(nlogn) O(n^2)
希爾排序 O(n^1.5) O(n) O(n^1.5)
插入排序 O(n^2) O(n) O(n^2)
選擇排序 O(n^2) O(n^2) O(n^2)

3.輔助空間的比較
線形排序、二路歸併排序的輔助空間爲O(n),其它排序的輔助空間爲O(1);

4.其它比較
插入、冒泡排序的速度較慢,但參加排序的序列局部或整體有序時,這種排序能達到較快的速度。
反而在這種情況下,快速排序反而慢了。
當n較小時,對穩定性不作要求時宜用選擇排序,對穩定性有要求時宜用插入或冒泡排序。
若待排序的記錄的關鍵字在一個明顯有限範圍內時,且空間允許是用桶排序。
當n較大時,關鍵字元素比較隨機,對穩定性沒要求宜用快速排序。
當n較大時,關鍵字元素可能出現本身是有序的,對穩定性有要求時,空間允許的情況下。
宜用歸併排序。
當n較大時,關鍵字元素可能出現本身是有序的,對穩定性沒有要求時宜用堆排序。

重溫經典排序思想–C語言常用排序全解

相關知識介紹(所有定義只爲幫助讀者理解相關概念,並非嚴格定義):

1、穩定排序和非穩定排序
簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就
說這種排序方法是穩定的。反之,就是非穩定的。
比如:一組數排序前是a1,a2,a3,a4,a5,其中a2=a4,經過某種排序後爲a1,a2,a4,a3,a5,
則我們說這種排序是穩定的,因爲a2排序前在a4的前面,排序後它還是在a4的前面。假如變成a1,a4,
a2,a3,a5就不是穩定的了。

2、內排序和外排序
在排序過程中,所有需要排序的數都在內存,並在內存中調整它們的存儲順序,稱爲內排序;
在排序過程中,只有部分數被調入內存,並藉助內存調整數在外存中的存放順序排序方法稱爲外排序。

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章