各類排序算法時間複雜度

 

各類排序算法比較 算法

 

各類經常使用排序算法函數

類別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^2)只是表示其操做次數的數量級
三、最好的狀況是數據原本就有序,複雜度爲O(n)

快速排序

O(N*log2N)

O(N*log2N) 

O(N2)

O(log2n)~O(n) 

不穩定

複雜

一、n大時好,快速排序比較佔用內存,內存隨n的增大而增大,但倒是效率高不穩定的排序算法。
二、劃分以後一邊是一個,一邊是n-1個,
這種極端狀況的時間複雜度就是O(N^2)
三、最好的狀況是每次都能均勻的劃分序列,O(N*log2N)

歸併排序

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).

相關文章
相關標籤/搜索