排序法與時間複雜度

排序法比較

排序法時間複雜度特性數據大小數據初始狀態空間複雜度數據範圍穩定排序
計數/基數/桶排序法O(n)非比較有限範圍整數用計數或桶排序。非整數範圍用基數排序
快速/合併/堆排序O(nlog2n)分治法完全隨機數據不需額外空間用快速或堆排序。需則用合併排序穩定排序用合併排序。非穩定用快速或堆排序
選擇/插入/冒泡排序O(n2)簡單接近排好插入排序的最佳時間複雜度為O(n)穩定排序用插入排序



特性

- 越簡單的越慢,如冒泡/選擇/插入排序,時間複雜度O(n^2)。

- 帶分治策略較複雜,如快速/合併/堆排序,時間複雜度O(nlogn)。

- 非比較靠數據特性排序更快,如計數/基數/桶排序,時間複雜度O(n+k)。


使用那種排序法判斷依據

- 數據大小

10-1000個,用時間複雜度O(n^2)的演算法。

大於1000個,用時間複雜度O(nlogn)或O(n+k)的演算法。

- 數據初始狀態

已接近排序,插入排序有效,最佳時間複雜度為O(n)。

完全隨機數據,用時間複雜度O(nlogn)的演算法。

如何判斷數據已接近排序或完全隨機,參考給定一數列,算其中有多少個逆序對


- 空間複雜度限制

原地排序,不需額外空間,用快速排序或堆排序。

需額外空間,用合併排序。

- 數據範圍與特性

範圍有限數據,如排序有限範圍整數(如0-100),用計數或桶排序。

非整數數據,如浮點數或字串,用基數排序,特別在多位數情況。

- 穩定性要求

穩定排序,用合併或插入排序。

非穩定排序,用快速或堆排序。







沒有留言:

張貼留言

寫下幸福點子吧!