希爾排序比冒泡排序快5倍,比插入排序快約2倍,比快排、歸併排序、堆排序慢不少。適合數據量不大於5000,速度不是特別重要的場合。對數據量較小的數列重複排序是很是好的。算法
歸併排序比堆排序還要快一點,所以比快排、希爾也要快。可是須要內存空間大,比堆排序須要多一倍的內存空間,由於須要一個額外的數組。數組
快排是遞歸的,因此不適合內存很是有限的狀況。spa
堆排序不須要大量遞歸或者多維數組暫存數據,適合數據量很是巨大的序列,快排、歸併都須要遞歸來設計算法,數據量很是大的時候,容易發生堆棧溢出。 設計
堆排序適合大量數據排序,百萬級別,特別是在大量數據中找出前N大或前N小的排序。通常找出前N大,須要用小堆;找出前N小,須要用大堆。排序
排序法遞歸 |
平均時間內存 |
最差情形ci |
穩定度table |
額外空間效率 |
備註 |
冒泡 |
O(n2) |
O(n2) |
穩定 |
O(1) |
n小時較好 |
交換 |
O(n2) |
O(n2) |
不穩定 |
O(1) |
n小時較好 |
選擇 |
O(n2) |
O(n2) |
不穩定 |
O(1) |
n小時較好 |
插入 |
O(n2) |
O(n2) |
穩定 |
O(1) |
大部分已排序時較好 |
基數 |
O(logRB) |
O(logRB) |
穩定 |
O(n) |
B是真數(0-9),R是基數(個十百) |
Shell |
O(nlogn) |
O(ns) 1<s<2 |
不穩定 |
O(1) |
s是所選分組 |
快速 |
O(nlogn) |
O(n2) |
不穩定 |
O(nlogn) |
n大時較好 |
歸併 |
O(nlogn) |
O(nlogn) |
穩定 |
O(1) |
n大時較好 |
堆 |
O(nlogn) |
O(nlogn) |
不穩定 |
O(1) |
n大時較好 |