1. 程式人生 > >排序算法(一):概述

排序算法(一):概述

交換 內部排序 否則 -- 情況 round 穩定 text center

排序算法(一):概述

排序是程序開發中一種非常常見的操作,對一組任意的數據元素(或記錄)經過排序操作後,就可以把他們變成一組按關鍵字排序的有序隊列。

對於排序算法從以下幾點去衡量算法的優劣:

  1. 時間復雜度,所謂時間復雜度就是將一組數從無序到有序所花費的時間,通常使用一個量級去衡量,比如O(n) 或者 O(n*n)
  2. 空間復雜度,所謂空間復雜度就是在排序過程中使用輔助空間的大小,通常也是使用一個量級去衡量,比如O(n) 或者 O(n*n)
  3. 是否穩定,所謂排序算法是否穩定的定義是對於相等的兩個元素,在排序之後元素的位置是否互換,比如一個數組array array[i]與array[j]相等且(i<j),如果排序後array[i]與array[j]相互交換,我們則說這個排序是不穩定的,否則是穩定的。

對於排序算法的分類:

  1. 內部排序,所謂內部排序就是整個排序過程中都是在內存中,無需借助磁盤就可以完成排序,即為內部排序
  2. 外部排序,所謂外部排序就是數據量比較大,無法一次性將數據載入內存,需要內存與磁盤的多次數據交換才能完成的排序,即為外部排序

外部排序:

  1. 多路歸並排序
  2. 敗者樹

內部排序:

  1. 插入排序:直接插入排序,希爾排序
  2. 選擇排序:簡單選擇排序,堆排序
  3. 交換排序:冒泡排序,快速排序
  4. 歸並排序
  5. 基數排序
  6. 桶排序
  7. 計數排序

排序算法整體印象圖(來自網絡截圖),我們先對整體的排序算法一個概括,後續會詳細的一一介紹

算法種類 排序算法 平均時間復雜度 最好情況 最壞情況 空間復雜度 是否穩定
插入排序 直接插入排序算法 O(n2) O(n) O(n2) O(1) 穩定
希爾排序算法 O(nlogn) O(nlogn2) O(nlogn2) O(1) 不穩定
選擇排序 簡單選擇排序算法 O(n2) O(n2) O(n2) O(1) 不穩定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不穩定
交換排序 冒泡排序算法 O(n2) O(n) O(n2) O(1)/無需 穩定
快速排序算法 O(nlogn) O(nlogn) O(n2) O(logn) 不穩定
-- 歸並排序算法 O(nlogn) O(nlogn) O(nlogn) O(n) 穩定
-- 基數排序算法 O(n*k) O(n*k) O(n+k) O(k) 穩定
-- 桶排序算法 O(n+k) O(n+k) O(n2) O(n+k) 穩定
-- 計數排序算法 O(n+k) O(n+k) O(n+k) O(k) 穩定

歡迎大家一塊探討

排序算法(一):概述