經常使用排序算法比較

  平均時間複雜度 最差時間複雜度 空間複雜度 是否穩定 總結
冒泡排序 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較大時,歸併排序所需時間較堆排序省,但歸併排序須要的輔助存儲量更大。排序

相關文章
相關標籤/搜索