插入排序法與選擇排序法的比較
在題(一)和題(二)中,我們分別設計了插入排序法(Insertion Sort)和選擇排序法(Selection Sort)的程式。當在相同的電腦和相同的執行環境下單獨分別執行這兩個排序程式時,計算速度可能會有所不同。讓我們分析這兩種排序方法的特性,從而確定哪一種方法在相同 N 值時計算速度較快。
插入排序法(Insertion Sort)
- 算法描述:插入排序法假設前 i−1i-1i−1 個元素已經排序完成,在插入第 iii 個元素時,只需要一個一個比較,找到適合的位置放進去,最後輸入完也就剛好排序完成。
- 時間複雜度:
- 最壞情況:O(n2)O(n^2)O(n2)(數組反序排列)
- 最佳情況:O(n)O(n)O(n)(數組已經有序)
- 平均情況:O(n2)O(n^2)O(n2)
選擇排序法(Selection Sort)
- 算法描述:選擇排序法每次遍歷數組,找到最小的元素並將它放到已排序部分的末尾,重複這個過程直到整個數組排序完成。
- 時間複雜度:
- 最壞情況:O(n2)O(n^2)O(n2)
- 最佳情況:O(n2)O(n^2)O(n2)
- 平均情況:O(n2)O(n^2)O(n2)
比較兩者的計算速度
-
平均情況下的時間複雜度:
- 插入排序和選擇排序在最壞情況和平均情況下的時間複雜度都是 O(n2)O(n^2)O(n2)。這意味著在大多數情況下,兩者的性能應該是相似的。
-
最佳情況下的時間複雜度:
- 插入排序在最佳情況下的時間複雜度是 O(n)O(n)O(n),當數組已經排序時,插入排序只需要線性時間。
- 選擇排序在最佳情況下的時間複雜度仍然是 O(n2)O(n^2)O(n2),因為它無論如何都需要遍歷整個數組以找到最小元素。
-
數組有序程度的影響:
- 如果數組接近有序,插入排序會比選擇排序更快。這是因為插入排序在這種情況下只需要很少的比較和移動操作,而選擇排序仍需要完全遍歷數組多次。
-
常數因子的影響:
- 雖然插入排序和選擇排序的時間複雜度都是 O(n2)O(n^2)O(n2),但插入排序的內部循環通常比選擇排序的內部循環較少,這意味著插入排序的常數因子可能更小一些。
結論
插入排序法通常會比選擇排序法更快,特別是在數組已經部分有序或完全有序的情況下。
這是因為:
- 插入排序在最佳情況下的時間複雜度是 O(n)O(n)O(n),而選擇排序無論如何都需要 O(n2)O(n^2)O(n2) 的時間。
- 插入排序對於部分有序的數組表現優異,只需要少量的比較和移動操作。
因此,在相同的電腦和相同的執行環境下,對於相同的 N 值,插入排序法的計算速度通常會比選擇排序法更快。