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