1. 程式人生 > >演算法:(一)排序

演算法:(一)排序

(一)時間複雜度為O(N²),空間複雜度為O(1)的排序

  • 氣泡排序
  • 選擇排序
  • 插入排序

(二)時間複雜度為O(NlogN)的排序

  • 歸併排序空間複雜度為O(N)
  • 快速排序,空間複雜度為O(logN)~O(N)
  • 堆排序,空間複雜度為O(1)
    • 經典堆排序實現使用了遞迴的方式(函式棧,空間複雜度為O(logN)
  • 希爾排序,空間複雜度為O(1)

(三)時間複雜度為O(N)的排序,空間複雜度為O(M)

    不是基於比較的排序,思想來自桶排序。

  • 計數排序
  • 基數排序

(四)穩定性的概念

    假定待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,稱這種排序演算法是穩定的,否則稱為不穩定的。

  • 穩定的排序演算法:
    • 冒泡、插入、歸併、計數、基數、桶
  • 不穩定的排序演算法:
    • 選擇、快速、希爾、堆

(五)補充

①排序演算法無絕對優劣。通常不能隨便說哪種排序演算法好。這個和要排序的元素相關。例如對人的年齡排序或者身高排序,因為這種資料範圍通常比較小,可以考慮採用計數排序。但是對於均勻分佈的整數,計數排序就不合適了。除非題目特別說明,否則認為要排序的資料範圍是均勻分佈的。

②快速排序之所以叫快速排序,不代表它比堆排序和歸併排序優良。在最好的情況下,它的漸進複雜度和堆排序和歸併排序是相同的。只是快速排序的常量係數比較小而已。

③工程上的排序

  • 工程上的排序是綜合排序
  • 陣列較小時,插入排序。
  • 陣列較大時,快速排序或其它O(NlogN)的排序