平均時間複雜度 | 最差時間複雜度 | 空間複雜度 | 是否穩定 | 總結 | |
冒泡排序 | O(n^2) | O(n^2) | O(1) | 是 | 最慢的排序算法 |
選擇排序 | O(n^2) | O(n^2) | O(1) | 否 | 是一種交換排序算法,實際使用較少 |
插入排序 | O(n^2) | O(n^2) | O(1) | 是 | 比冒泡快2倍,通常在數據量1000如下使用。 |
希爾排序 | O(nlogn)算法 |
O(n^s) 1 <s < 2 |
O(1) | 否 | 比冒泡快5倍,比插入快2倍,比快排、歸併、堆等慢。簡單,適用於數據量較少(5000)如下而且速度不是很重要的場合。 |
快速排序 | O(nlogn) | O(n^2) | O(1) | 否 | 使用較多,平均速度最快的排序算法。它是遞歸實現的,須要注意遞歸棧可能溢出的問題。 |
歸併排序 | O(nlogn) | O(n) | 是 | 須要的額外空間較多,主要用於外部排序 | |
堆排序 | O(nlogn) | O(1) | 否 | 適用於數據量很是大的場景,好比超過百萬的記錄 | |
基數排序 | O(logrd)(d是關鍵字項數0-9,r是基數,個十百) | O(logrd) | O(n) | 是 | 只能用於整數的排序,使用很少。 |
注意:上面對於算法的時間複雜度只給出了量級,而同一量級的因爲其常係數的不一樣,其時間複雜度也是有差別的。性能
從平均性能來講,快速排序最佳,由於所需時間最短(快排和堆排序都是nlogn的量級,可是快排的常係數較堆排序更小一些),spa
但快速排序在最壞狀況下的時間性能不如堆排序和歸併排序。n較大時,歸併排序所需時間較堆排序省,但歸併排序須要的輔助存儲量更大。排序