一、最基礎排序算法算法
時間複雜度 |
穩定性 |
|
冒泡排序 | O(n^2) |
穩定 |
選擇排序 |
O(n^2) | 不穩定 |
插入排序 | O(n^2) | 穩定 |
二、5箇中間改良排序算法ide
時間複雜度 | 穩定性 | |
歸併排序 |
O(nlogn) |
穩定 |
希爾排序 |
平均O(nlogn),最壞O(n^2) |
不穩定 |
堆排序 |
O(nlogn) |
不穩定 |
快速排序 |
平均O(nlogn),最壞O(n^2) | 不穩定 |
隨機化快排 |
O(nlogn) | 不穩定 |
(1)、歸併、堆、快排是漸進性的最優排序算法(在大規模的數據下尤其體現);優化
(2)、解決快排最壞狀況的方案:隨機化快排,隨機選擇主元;(與輸入無關,就是隨機器的機率問題了);spa
(3)、以上都是比較模型的排序算法,最快時間複雜度爲:O(nlogn);排序
(4)、歸併排序用並行算法的話,時間複雜度:O(n/logn);
遞歸
三、3個侷限性的排序算法it
時間複雜度 | 穩定性 | |
桶排序 |
O(n) |
穩定 |
計數排序 |
O(n) | 穩定 |
基數排序 |
O(n) | 穩定 |
(1)、這3個排序算法的時間複雜度都爲:O(n),都是穩定性的排序算法;table
(2)、都是以空間換時間爲代價的算法,處理數據的規模在較小範圍內;class
(3)、無重複數字出現:建議用桶排;基礎
(4)、有重複數字出現,用計數/基數排序;基數排序是對計數排序的優化,在輔助空間上的優化,基數排序所需輔助空間爲:10個該元素空間,計數排序所需輔助空間爲:最大數字+1個空間;
四、空間複雜度
O(n):桶排,計數,基數
O(logn):歸併,快排,遞歸堆排
O(1):非遞歸堆排,希爾