幾種排序算法的總結

  • 1.冒泡排序:簡單的排序算法,時間複雜度O(n^2),對少許排序有效,排序效率最低,須要一趟一趟對比,通常做爲其餘排序算法的對比。
  • 2.插入排序:插入排序是對冒泡排序的改進,比冒泡快兩倍,通常用於數據量不大於1000,或者重複排序超過200,或者部分已經排序的序列。
  • 3.希爾排序:希爾排序是將數據分紅幾組,每組以內在進行插入排序,最後對全部數據進行一次插入排序,以減小數據交換和移動次數。平均效率O(n*logn)。

                希爾排序比冒泡排序快5倍,比插入排序快約2倍,比快排、歸併排序、堆排序慢不少。適合數據量不大於5000,速度不是特別重要的場合。對數據量較小的數列重複排序是很是好的。算法

  • 4.選擇排序:時間複雜度O(n^2),與冒泡排序都是排序算法的初級階段,應用中較少使用。
  • 5.歸併排序:先分解要排序的序列,直到只有一個組的時候,再一次合併。時間複雜度O(n*logn)。

                歸併排序比堆排序還要快一點,所以比快排、希爾也要快。可是須要內存空間大,比堆排序須要多一倍的內存空間,由於須要一個額外的數組。數組

  • 6.快速排序:快排是一個就地排序,分而治之,大規模遞歸的排序。通常狀況下,快排比大部分排序算法都要快。某些狀況下部分排序算法比快排快,但就一般意義上說快排就是快。

                快排是遞歸的,因此不適合內存很是有限的狀況。spa

  • 7.堆排序:堆排序會將全部數據建成一個堆,時間複雜度O(n*logn)。

              堆排序不須要大量遞歸或者多維數組暫存數據,適合數據量很是巨大的序列,快排、歸併都須要遞歸來設計算法,數據量很是大的時候,容易發生堆棧溢出。 設計

              堆排序適合大量數據排序,百萬級別,特別是在大量數據中找出前N大或前N小的排序。通常找出前N大,須要用小堆;找出前N小,須要用大堆。排序

  • 8.總結:

排序法遞歸

 平均時間內存

最差情形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大時較好

相關文章
相關標籤/搜索