演算法:(一)排序
阿新 • • 發佈:2018-12-12
(一)時間複雜度為O(N²),空間複雜度為O(1)的排序
- 氣泡排序
- 選擇排序
- 插入排序
(二)時間複雜度為O(NlogN)的排序
- 歸併排序,空間複雜度為O(N)
- 快速排序,空間複雜度為O(logN)~O(N)
- 堆排序,空間複雜度為O(1)
- 經典堆排序實現使用了遞迴的方式(函式棧),空間複雜度為O(logN)
- 希爾排序,空間複雜度為O(1)
(三)時間複雜度為O(N)的排序,空間複雜度為O(M)
不是基於比較的排序,思想來自桶排序。
- 計數排序
- 基數排序
(四)穩定性的概念
假定待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,稱這種排序演算法是穩定的,否則稱為不穩定的。
- 穩定的排序演算法:
- 冒泡、插入、歸併、計數、基數、桶
- 不穩定的排序演算法:
- 選擇、快速、希爾、堆
(五)補充
①排序演算法無絕對優劣。通常不能隨便說哪種排序演算法好。這個和要排序的元素相關。例如對人的年齡排序或者身高排序,因為這種資料範圍通常比較小,可以考慮採用計數排序。但是對於均勻分佈的整數,計數排序就不合適了。除非題目特別說明,否則認為要排序的資料範圍是均勻分佈的。
②快速排序之所以叫快速排序,不代表它比堆排序和歸併排序優良。在最好的情況下,它的漸進複雜度和堆排序和歸併排序是相同的。只是快速排序的常量係數比較小而已。
③工程上的排序
- 工程上的排序是綜合排序
- 陣列較小時,插入排序。
- 陣列較大時,快速排序或其它O(NlogN)的排序