排序算法彙總

http://www.javashuo.com/article/p-hmcedzbw-r.html算法

冒泡排序(Bubble Sort)數組

  • 比較相鄰的元素。若是第一個比第二個大,就交換它們兩個,直到最後
  • 算法分析
    • 最佳狀況:T(n) = O(n)   
      • 這裏注意,若是發現沒有交換,證實已是排好序了
      • 第一次比較就沒有出現交換,因此是 O(n)   
    • 最差狀況:T(n) = O(n2)   
    • 平均狀況:T(n) = O(n2)

選擇排序(Selection Sort)ui

  • 第一個分別與後面的進行比較,每次把最大(最小)的投出來
  • 算法分析
    • 最佳狀況:T(n) = O(n2) 
    • 最差狀況:T(n) = O(n2)  
    • 平均狀況:T(n) = O(n2)

插入排序(Insertion Sort).net

  • 每次拿出一個與前面挨着的比較,發現第一個比本身大(小)的插入,前面的序列都是有序序列
  •  算法分析
    • 最佳狀況:T(n) = O(n)   
      • 每次都不須要動(每次比較一次),遍歷一次
    • 最壞狀況:T(n) = O(n2)   
    • 平均狀況:T(n) = O(n2)
      • 每次比較多少次不肯定,近似n次

希爾排序(Shell Sort)3d

  • 改進插入排序
  • 「縮小增量排序」或者「遞減增量排序」
  •  算法分析
    • 最佳狀況:T(n) = O(nlog2 n)  
    • 最壞狀況:T(n) = O(nlog2 n)  
    • 平均狀況:T(n) =O(nlog2n) 
    • 時間複雜度:
      • 基於插入排序的兩點性質而來:
        • 對一個「幾乎」已經排好序的無序序列,插入排序的效率是很高的,能夠達到線性排序的效率

歸併排序(Merge Sort)blog

  • 把長度爲n的輸入序列分紅兩個長度爲n/2的子序列;
  • 對這兩個子序列分別採用歸併排序;
  • 將兩個排序好的子序列合併成一個最終的排序序列。
  • 算法分析
    • 最佳狀況:T(n) = O(n)  
    • 最差狀況:T(n) = O(nlogn)  
    • 平均狀況:T(n) = O(nlogn)
      • 最後一輪訪問是n
      • 往前推每次都是n/2
      • 取極限

快速排序(Quick Sort)排序

  • 選擇中間數,把大雨的丟右邊,小於的丟左邊
    • 遞歸
  • 算法分析
    • 最佳狀況:T(n) = O(nlogn)   
    • 最差狀況:T(n) = O(n2)   
    • 平均狀況:T(n) = O(nlogn) 

堆排序(Heap Sort)遞歸

  •  
  • 算法分析
    • 最佳狀況:T(n) = O(nlogn)
    • 最差狀況:T(n) = O(nlogn)
    • 平均狀況:T(n) = O(nlogn)

計數排序(Counting Sort)內存

  • 有肯定範圍的數
  • 申請最大數長度的數組
  • 算法分析
    • 當輸入的元素是n 個0到k之間的整數時,它的運行時間是 O(n + k)。
      • 計數排序不是比較排序,排序的速度快於任何比較排序算法。
      • 因爲用來計數的數組C的長度取決於待排序數組中數據的範圍
        • 等於待排序數組的最大值與最小值的差加上1
      • 這使得計數排序對於數據範圍很大的數組,須要大量時間和內存。
    • 最佳狀況:T(n) = O(n+k)  
    • 最差狀況:T(n) = O(n+k)  
    • 平均狀況:T(n) = O(n+k)

桶排序(Bucket Sort)get

  • 桶排序是計數排序的升級版。

  • 桶排序最好狀況下使用線性時間O(n),

    • 桶排序的時間複雜度,取決與對各個桶之間數據進行排序的時間複雜度,

      • 由於其它部分的時間複雜度都爲O(n)。

    • 很顯然,桶劃分的越小,各個桶之間的數據越少,排序所用的時間也會越少。

    • 但相應的空間消耗就會增大。

  • 最佳狀況:T(n) = O(n+k) 

  • 平均狀況:T(n) = O(n+k)   

  • 最差狀況:T(n) = O(n2) 

基數排序(Radix Sort)

  • 基數排序也是非比較的排序算法,對每一位進行排序,從最低位開始排序,複雜度爲O(kn),爲數組長度,k爲數組中的數的最大的位數;
  • 算法分析
    • 最佳狀況:T(n) = O(n * k)   
    • 最差狀況:T(n) = O(n * k)   
    • 平均狀況:T(n) = O(n * k)
相關文章
相關標籤/搜索