1. 程式人生 > >輕鬆搞定十大排序演算法(c++版)

輕鬆搞定十大排序演算法(c++版)

本文章,是為了讓讀者會十大排序演算法。如果您對我的部落格感興趣,歡迎關注我☺。如對本文章有任何的疑問或者您有更好理解,歡迎在評論區寫下您的見解。

0、簡介

本系列文章,是為了讓讀者會十大經典排序演算法,如果您對我的部落格感興趣,歡迎關注我☺。如對本系列有任何的疑問或者有更好解答,歡迎在評論區寫下您的見解。

1、相關概念

時間複雜度:


反映當資料量變化時,操作次數的多少;時間複雜度在評估時,要只保留最高項,並且不要最高項的係數。(下面用logN表示 log以2為底,N的對數)

空間複雜度:

是指演算法在計算機內執行時,所需額外開闢的空間。

指標:

同 時間複雜度

常數項:

與N的大小無關的操作。

穩定性:

(1)穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面。
(2)不穩定:如果a原本在b的前面,而a=b,排序之後 a 可能會出現在 b 的後面。

2、演算法分類

十大經典排序演算法可以分為兩大類:
0、非線性時間排序:通過比較來決定元素間的相對次序。時間複雜度最快為O(logN)
1、線性時間排序:通過建立有序的空間,將元素按照一定的規則放入有序空間,再依次取出。以空間來換取時間,可以突破O(logN)

  • 非線性時間排序
    1. 比較排序
      • 氣泡排序
      • 快速排序
    2. 插入排序
      • 插入排序
      • 希爾排序
    3. 選擇排序
      • 選擇排序
      • 堆排序
    4. 歸併排序
      • 二路歸併排序
      • 多路歸併排序
  • 線性時間排序
    1. 計數排序
    2. 堆排序
    3. 基數排序

3、各演算法的時間複雜度

排序演算法 時間複雜度(平均) 時間複雜度(最壞) 時間複雜度(最好) 空間複雜度 穩定性
氣泡排序 O(N2) O(N2) O(N2) O(1) 穩定
氣泡排序(外層優化) O(N2) O(N2) O(N) O(1) 穩定
氣泡排序(外+內優化) O(N2) O(N2) O(
N
)
O(1) 穩定
快速排序(經典) O(NlogN) O(N2) O(NlogN) O(logN) 不穩定
快速排序(隨機) O(NlogN) O(NlogN) O(NlogN) O(logN) 不穩定
插入排序 O(N2) O(N2) O(N) O(1) 穩定
希爾排序 O(N1.3) O(N2) O(N) O(1) 穩定
選擇排序 O(N2) O(N2) O(N2) O(1) 不穩定
堆排序 O(NlogN) O(NlogN) O(NlogN) O(1) 不穩定
二路歸併排序 O(NlogN) O(NlogN) O(NlogN) O(N) 穩定
多路路歸併排序 O(NlogN) O(NlogN) O(NlogN) O(N) 穩定
計數排序 O(N+k) O(N+k) O(N+k) O(N+k) 穩定
桶排序 O(N+k) O(N2) O(N+k) O(