各種排序演算法的複雜度

2021-07-11 15:19:48 字數 2601 閱讀 1862

排序法

平均時間

最差情形

穩定度額外空間

備註冒泡

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(logr

b)o(logr

b)穩定

o(n)

b是真數(0-9),

r是基數(個十百)

shell

o(nlogn)

o(n^1.25)

???o(ns

) 1不穩定

o(1)

s是所選分組

快速o(nlogn)

o(n2

)不穩定

o(nlogn)

n大時較好

歸併o(nlogn)

o(nlogn)

穩定o(1)

n大時較好

堆o(nlogn)

o(nlogn)

不穩定o(1)

n大時較好

各演算法的時間複雜度

平均時間複雜度

插入排序 o(n^2)

氣泡排序 o(n^2)

選擇排序 o(n^2)

快速排序 o(n log n)

堆排序 o(n log n)

歸併排序 o(n log n)

基數排序 o(n)

希爾排序 o(n^1.25)

1 快速排序(quicksort)

快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。

(1) 如果不多於1個資料,直接返回。

(2) 一般選擇序列最左邊的值作為支點資料。

(3) 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。

(4) 對兩邊利用遞迴排序數列。

快速排序比大部分排序演算法都要快。儘管我們可以在某些特殊的情況下寫出比快速排序快的演算法,但是就通常情況而言,沒有比它更快的了。快速排序是遞迴的,對於記憶體非常有限的機器來說,它不是乙個好的選擇。

2 歸併排序(mergesort)

歸併排序先分解要排序的序列,從1分成2,2分成4,依次分解,當分解到只有1個一組的時候,就可以排序這些分組,然後依次合併回原來的序列中,這樣就可以排序所有資料。合併排序比堆排序稍微快一點,但是需要比堆排序多一倍的記憶體空間,因為它需要乙個額外的陣列。

3 堆排序(heapsort)

堆排序適合於資料量非常大的場合(百萬資料)。

堆排序不需要大量的遞迴或者多維的暫存陣列。這對於資料量非常巨大的序列是合適的。比如超過數百萬條記錄,因為快速排序,歸併排序都使用遞迴來設計演算法,在資料量非常大的時候,可能會發生堆疊溢位錯誤。

堆排序會將所有的資料建成乙個堆,最大的資料在堆頂,然後將堆頂資料和序列的最後乙個資料交換。接下來再次重建堆,交換資料,依次下去,就可以排序所有的資料。

4 shell排序(shellsort)

shell排序通過將資料分成不同的組,先對每一組進行排序,然後再對所有的元素進行一次插入排序,以減少資料交換和移動的次數。平均效率是o(nlogn)。其中分組的合理性會對演算法產生重要的影響。現在多用d.e.knuth的分組方法。

shell排序比氣泡排序快5倍,比插入排序大致快2倍。shell排序比起quicksort,mergesort,heapsort慢很多。但是它相對比較簡單,它適合於資料量在5000以下並且速度並不是特別重要的場合。它對於資料量較小的數列重複排序是非常好的。

5 插入排序(insertsort)

插入排序通過把序列中的值插入乙個已經排序好的序列中,直到該序列的結束。插入排序是對氣泡排序的改進。它比氣泡排序快2倍。一般不用在資料大於1000的場合下使用插入排序,或者重複排序超過200資料項的序列。

6 氣泡排序(bubblesort)

氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是o(n^2)的演算法。

7 交換排序(exchangesort)和選擇排序(selectsort)

這兩種排序方法都是交換方法的排序演算法,效率都是 o(n2

)。在實際應用中處於和氣泡排序基本相同的地位。它們只是排序演算法發展的初級階段,在實際中使用較少。

8 基數排序(radixsort)

基數排序和通常的排序演算法並不走同樣的路線。它是一種比較新穎的演算法,但是它只能用於整數的排序,如果我們要把同樣的辦法運用到浮點數上,我們必須了解浮點數的儲存格式,並通過特殊的方式將浮點數對映到整數上,然後再對映回去,這是非常麻煩的事情,因此,它的使用同樣也不多。而且,最重要的是,這樣演算法也需要較多的儲存空間。

各種排序演算法的複雜度

各種排序演算法的複雜度 joyes414 排序法平均時間 最差情形 穩定度額外空間 備註冒泡 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 n o n2 o n2 o 1 穩定簡單 希爾排序 o n o n1.3 o n2 o 1 不穩定複雜 選擇排序 直接選擇 o n o n2 o n2...

各種排序演算法複雜度比較

寫在前面 筆試題目當中會出現各種排序演算法的比較,分為最好,最壞,平均情況的複雜度比較,在這裡總結一下。主要內容 最好情況 一般會這麼問 在各自最優條件下以下演算法複雜度最低的是 看清題目的要求是問在最優的條件下,所以插入排序和氣泡排序是最優的為o n 的複雜度。氣泡排序這裡為啥最好情況時o n 氣...