排序演算法比較

2021-04-14 01:56:18 字數 1703 閱讀 9925

本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮:時間複雜度、空間複雜度、演算法穩定性、演算法簡單性、待排序記錄數

n的大小、記錄本身的資訊量等。選擇n

個整數組成一些隨機排序,各種內部排序方法的實際時間如圖

7-10

所示。

從時間複雜度看,所有內部排序方法可以分為兩類。插入排序、選擇排序和起泡排序這三種簡單排序方法屬於第一類,其時間複雜度為

o(n2)

;堆排序、快速排序和歸併排序這三種排序方法屬於第二類,其時間複雜度為

o(nlog2n)

。這是就平均情況而言的,如果從最好的情況考慮,則插入排序和起泡排序的時間複雜度最好,為

o(n)

,而其他演算法的最好情況同平均情況大致相同。如果從最壞的情況考慮,快速排序的時間複雜度為

o(n2)

,插入排序和起泡排序雖然同平均情況相同,但係數大約增加一倍,執行速度降低一半,而選擇排序、堆排序和歸併排序則影響不大。

總之,在平均情況下,快速排序最快;在最好情況下,插入排序和起泡排序最快;在最壞情況下,堆排序和歸併排序最快。

從空間複雜度看,歸併排序屬於第一類,其空間複雜度為

o(n)

;快速排序屬於第二類,其空間複雜度為

o(nlog2n)

;其它排序方法歸為第三類,其空間複雜度為

o(1)

。所以,第三類演算法的空間複雜度最好,第二類次之,第一類最差。

從演算法穩定性看,所有內部排序方法可以分為兩類。插入排序、起泡排序和歸併排序屬於第一類,是穩定的排序方法;選擇排序、快速排序和堆排序屬於第二類,是不穩定的排序方法。相對而言,後者的時間效能較好。

由於大多數情況下排序是按照記錄的主關鍵字進行的,則所用的排序方法是否穩定無關緊要。但是如果排序是按照記錄的次關鍵字進行的,則應根據問題需要慎重選擇排序方法及其描述演算法。

從演算法簡單性看,一類是簡單演算法,一般包括插入排序、選擇排序和起泡排序,這些演算法都比較簡單和直接,易於理解;另一類是改進後的演算法,一般包括堆排序、快速排序和歸併排序,這些演算法都比較複雜。當序列中的記錄基本有序或者

n值較小時,直接插入排序是最佳的排序方法,因此常常將它和其他的排序方法結合使用。

從待排序的記錄數

n的大小看,

n越小,n2和

nlog2n

越接近,採用簡單排序方法越合適;

n越大,採用改進排序方法越合適。另外,簡單演算法的輸入和除錯比改進演算法的輸入和除錯要少用許多時間,如果也考慮這些時間,則

n較小時選用簡單演算法比改進演算法要節省時間。當

n越大時,n2和

nlog2n

的差距越大,因此選用改進演算法效果更明顯。

從記錄本身的資訊量看,資訊量越大占用的儲存空間越大,移動記錄時花費的時間越多,所以對記錄的移動次數較多的演算法不利。例如,在三種簡單排序演算法中,選擇排序移動記錄的次數為

o(n)

,其他兩種為

o(n2)

。所以當記錄本身的資訊量較大時,對選擇排序有利,而對其他兩種演算法不利。在三種改進演算法中,記錄本身的資訊量較大時,對歸併排序不利。

以上從六個方面對各種內部排序方法進行了分析和比較,那麼在實際的排序問題中應如何考慮它們的主次呢?一般來說,首先考慮演算法的穩定性,如果排序要求穩定,則只能在穩定的方法中選擇,否則就可以選擇任何的排序方法;其次要考慮待排序的記錄數的大小,如果

n較大,則在改進演算法中選擇,否則在簡單演算法中選擇;然後再考慮其他的因素。

排序演算法比較

排序方法 最好時間 平均時間 最壞時間 輔助儲存 穩定性備註 簡單選擇排序 o n2 o n2 o n2 o 1 不穩定n小時較好 直接插入排序 o n o n2 o n2 o 1 穩定大部分已有序時較好 氣泡排序 o n o n2 o n2 o 1 穩定n小時較好 希爾排序 o n o nlogn...

比較排序演算法

常用的比較排序演算法有 直接插入排序,希爾排序,選擇排序,堆排序,氣泡排序,快速排序,歸併排序等。它們的時間複雜度及空間複雜度為 實現 如下 includeusing namespace std include include 插入排序 void insertsort int a,size t si...

排序演算法比較

排序演算法的時間效率 平均情況 最好情況 最壞情況 基數排序 歸併排序 快速排序 希爾排序 插入排序 選擇排序 o n o n logn o n logn o n 1.5 o n 2 o n 2 o n o n logn o n logn o n o n o n 2 o n o n logn o n...