各類排序算法比較 算法
各類經常使用排序算法函數 |
||||||||
類別post |
排序方法spa |
時間複雜度排序 |
空間複雜度遞歸 |
穩定性內存 |
複雜性ci |
特色it |
||
最好table |
平均 |
最壞 |
輔助存儲 |
|
簡單 |
|
||
插入 排序 |
直接插入 |
O(N) |
O(N2) |
O(N2) |
O(1) |
穩定 |
簡單 |
|
希爾排序 |
O(N) |
O(N1.3) |
O(N2) |
O(1) |
不穩定 |
複雜 |
|
|
選擇 排序 |
直接選擇 |
O(N) |
O(N2) |
O(N2) |
O(1) |
不穩定 |
|
|
堆排序 |
O(N*log2N) |
O(N*log2N) |
O(N*log2N) |
O(1) |
不穩定 |
複雜 |
|
|
交換 排序 |
冒泡排序 |
O(N) |
O(N2) |
O(N2) |
O(1) |
穩定 |
簡單 |
一、冒泡排序是一種用時間換空間的排序方法,n小時好 |
快速排序 |
O(N*log2N) |
O(N*log2N) |
O(N2) |
O(log2n)~O(n) |
不穩定 |
複雜 |
一、n大時好,快速排序比較佔用內存,內存隨n的增大而增大,但倒是效率高不穩定的排序算法。 |
|
歸併排序 |
O(N*log2N) |
O(N*log2N) |
O(N*log2N) |
O(n) |
穩定 |
複雜 |
一、n大時好,歸併比較佔用內存,內存隨n的增大而增大,但倒是效率高且穩定的排序算法。 |
|
基數排序 |
O(d(r+n)) |
O(d(r+n)) |
O(d(r+n)) |
O(rd+n) |
穩定 |
複雜 |
|
|
注:r表明關鍵字基數,d表明長度,n表明關鍵字個數 |
注:
一、歸併排序每次遞歸都要用到一個輔助表,長度與待排序的表長度相同,雖然遞歸次數是O(log2n),但每次遞歸都會釋放掉所佔的輔助空間,
二、快速排序空間複雜度只是在一般狀況下才爲O(log2n),若是是最壞狀況的話,很顯然就要O(n)的空間了。固然,能夠經過隨機化選擇pivot來將空間複雜度下降到O(log2n)。
相關概念:
一、時間複雜度
時間複雜度能夠認爲是對排序數據的總的操做次數。反映當n變化時,操做次數呈現什麼規律。
常見的時間複雜度有:常數階O(1),對數階O(log2n),線性階O(n), 線性對數階O(nlog2n),平方階O(n2)
時間複雜度O(1):算法中語句執行次數爲一個常數,則時間複雜度爲O(1),
二、空間複雜度
空間複雜度是指算法在計算機內執行時所需存儲空間的度量,它也是問題規模n的函數
空間複雜度O(1):當一個算法的空間複雜度爲一個常量,即不隨被處理數據量n的大小而改變時,可表示爲O(1)
空間複雜度O(log2N):當一個算法的空間複雜度與以2爲底的n的對數成正比時,可表示爲O(log2n)
ax=N,則x=logaN,
空間複雜度O(n):當一個算法的空間複雜度與n成線性比例關係時,可表示爲0(n).