1.從時間復雜度比較?
從平均時間復雜度來考慮,直接插入排序、冒泡排序、直接選擇排序是三種簡單的排序方法,時間復雜度都為O(n2),而快速排序、堆排序、二路歸并排序的時間復雜度都為O(nlog2n),希爾排序的復雜度介于這兩者之間。若從最好的時間復雜度考慮,則直接插入排序和冒泡排序的時間復雜度最好,為O(n),其它的最好情形同平均情形相同。若從最壞的時間復雜度考慮,則快速排序的為O(n2),直接插入排序、冒泡排序、希爾排序同平均情形相同,但系數大約增加一倍,所以運行速度將降低一半,最壞情形對直接選擇排序、堆排序和歸并排序影響不大.
2.從空間復雜度比較?
歸并排序的空間復雜度最大,為O(n),快速排序的空間復雜度為O(log2n),其它排序的空間復雜度為O(1)。?
3.從穩定性比較?
直接插入排序、冒泡排序、歸并排序是穩定的排序方法,而直接選擇排序、希爾排序、快速排序、堆排序是不穩定的排序方法。?
4.從算法簡單性比較?
直接插入排序、冒泡排序、直接選擇排序都是簡單的排序方法,算法簡單,易于理解,而希爾排序、快速排序、堆排序、歸并排序都是改進型的排序方法,算法比簡單排序要復雜得多,也難于理解。
迄今為止,已有的排序方法遠遠不止本章討論的這些方法,人們之所以熱衷于研究多種排序方法,不僅是由于排序在計算機中所處的重要地位,而且還因為不同的方法各有其優缺點,可適用于不同的場合。選取排序方法時需要考慮的因素有:
待排序的記錄數目n;記錄本身信息量的大小;關鍵字的結構及分布情況;對排序穩定性的要求;語言工具的條件,輔助表的大小等。依據這些因素,可得出如下幾點結論:
(1)若n較小(譬如n50),可采用直接插入排序或直接選。由于直接插入排序所需記錄移動操作較直接選擇排序多,因此若記錄本身信息量較大時,則選用直接選擇排序為宜。?
(2)若文件的初始狀態已是按關鍵字基本有序,則選用直接插入排序泡排序為宜。?
(3)若N較大,則應根據其時間復雜度來選擇排序方法:快速排序\堆排序或歸并排序,快速排序是目前基于內部排序的中被認為是最好的方法,檔待排序的關鍵字是隨機時,快速排序的平均時間最少,但堆排序所需的輔助空間少于快速排序,并且不會出現序可能出現的最壞情況,這兩種排序方法都是不穩定的,若要求排序穩定則可選用歸并排序。但本文章結合介紹的兩兩歸并排算法并不值得提倡,通常可以將它和直接排序結合在一起用。先利用直接插入排序求得的子文件,然后再兩兩歸并之。因為直接插入排序是穩定的,所以,改進后的歸并排序是穩定的。
(4)前面討論的排序算法,除排序外,都是在一維數組上實現的,當記錄本身信息量較大時,為了避免浪費大量時間移動記錄,可以用鏈表作為存儲結構,如插入排序和歸并排序都易于在鏈表上實現,并分別稱之為表和歸并表,但有的方法,如快速排序和堆排序,在鏈表上難于實現,在這種情況下,可以提取關鍵字建立索引表,然后,對索引表進行排序。然而更為簡單的方法是;引入一個整形向量作為輔助表,排序前,若排序算法中要求交換,則只需交換R[I]和R[j]即可,排序結束后,向量就指示了記錄之間的順序關系.