1. 程式人生 > >常用的八大排序演算法時間複雜度和空間複雜度比較

常用的八大排序演算法時間複雜度和空間複雜度比較

    排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。

    各種內部排序按所採用的基本思想(策略)可分為:插入排序、交換排序、選擇排序、歸併排序和基數排序,它們的基本策略是:

1、插入排序:依次將無序序列中的一個記錄,按關鍵字值的大小插入到已排好序一個子序列的適當位置,直到所有的記錄都插入為止。具體的方法有:直接插入、表插入、2-路插入和shell排序。

2、交換排序:對於待排序記錄序列中的記錄,兩兩比較記錄的關鍵字,並對反序的兩個記錄進行交換,直到整個序列中沒有反序的記錄偶對為止。具體的方法有:氣泡排序、快速排序。

3、選擇排序:不斷地從待排序的記錄序列中選取關鍵字最小的記錄,放在已排好序的序列的最後,直到所有記錄都被選取為止。具體的方法有:簡單選擇排序、堆排序。

4、歸併排序:利用“歸併”技術不斷地對待排序記錄序列中的有序子序列進行合併,直到合併為一個有序序列為止。

5、基數排序:按待排序記錄的關鍵字的組成成分(“位”)從低到高(或從高到低)進行。每次是按記錄關鍵字某一“位”的值將所有記錄分配到相應的桶中,再按桶的編號依次將記錄進行收集,最後得到一個有序序列。

   常見的內部排序演算法有:插入排序(insertion sorting)、希爾排序(Shell Sort)、選擇排序(Selection sort)、堆排序(Heapsort)、氣泡排序(Bubble Sort)、快速排序(quick sort)、歸併排序(Merge sort)、基數排序(Radix sort)。

   下圖列出了各種排序演算法的時間複雜度、空間複雜度和穩定性情況。其中,空間複雜度僅列舉了平均情況下的複雜度,由於希爾排序的時間複雜度依賴於增量函式,所以這裡無法準確地給出其時間複雜度。