輕鬆搞定十大排序演算法(c++版)
阿新 • • 發佈:2019-02-12
本文章,是為了讓讀者會用十大排序演算法。如果您對我的部落格感興趣,歡迎關注我☺。如對本文章有任何的疑問或者您有更好理解,歡迎在評論區寫下您的見解。
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)
- 非線性時間排序
- 比較排序
- 氣泡排序
- 快速排序
- 插入排序
- 插入排序
- 希爾排序
- 選擇排序
- 選擇排序
- 堆排序
- 歸併排序
- 二路歸併排序
- 多路歸併排序
- 比較排序
- 線性時間排序
- 計數排序
- 堆排序
- 基數排序
3、各演算法的時間複雜度
排序演算法 | 時間複雜度(平均) | 時間複雜度(最壞) | 時間複雜度(最好) | 空間複雜度 | 穩定性 |
---|---|---|---|---|---|
氣泡排序 | O() | O() | O() | O() | 穩定 |
氣泡排序(外層優化) | O() | O() | O() | O() | 穩定 |
氣泡排序(外+內優化) | O() | O() | O( |
O() | 穩定 |
快速排序(經典) | O() | O() | O() | O() | 不穩定 |
快速排序(隨機) | O() | O() | O() | O() | 不穩定 |
插入排序 | O() | O() | O() | O() | 穩定 |
希爾排序 | O() | O() | O() | O() | 穩定 |
選擇排序 | O() | O() | O() | O() | 不穩定 |
堆排序 | O() | O() | O() | O() | 不穩定 |
二路歸併排序 | O() | O() | O() | O() | 穩定 |
多路路歸併排序 | O() | O() | O() | O() | 穩定 |
計數排序 | O() | O() | O() | O() | 穩定 |
桶排序 | O() | O() | O() | O( |