在前面三天,我們分別介紹了氣泡排序 (Bubble Sort)、選擇排序 (Selection Sort)、插入排序 (Insertion Sort)。這三個演算法都是經典的「基礎排序」,時間複雜度同樣是 $O(n^2)$,但它們在設計思路、操作方式、適用場景上各有不同。今天我們就來做一次系統化的分析比較。
可以看到,三者的直覺都很容易理解:
演算法 | 核心操作 | 一輪結束的效果 |
---|---|---|
氣泡排序 | 交換相鄰元素 | 把最大元素移到最後 |
選擇排序 | 找最小值並交換 | 把最小元素移到最前 |
插入排序 | 插入到有序區 | 維持前半段總是有序 |
演算法 | 最佳情況 | 平均情況 | 最壞情況 | 空間複雜度 | 穩定性 |
---|---|---|---|---|---|
氣泡排序 | $O(n)$ (若加早停機制) | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 穩定 |
選擇排序 | $O(n^2)$ | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 不穩定 |
插入排序 | $O(n)$ (幾乎有序時) | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 穩定 |
演算法 | 優點 | 缺點 |
---|---|---|
氣泡排序 | 概念直觀,易於實作;加上早停機制時,已排序資料效率高 | 大量交換,實務效率低 |
選擇排序 | 每輪最多一次交換,交換次數少;程式簡單 | 不穩定;最佳情況仍然是 $O(n^2)$ |
插入排序 | 最佳情況 $O(n)$,適合小資料集或幾乎有序的資料;穩定 | 平均/最壞仍是 $O(n^2)$,不適合大規模資料 |
氣泡、選擇、插入三種排序演算法雖然都屬於 $O(n^2)$,但它們代表了三種不同的思路:
在教學上,這三種演算法是理解排序的最佳起點,幫助我們掌握不同的思考角度。在實務上,雖然它們幾乎不會直接使用,但插入排序在某些特殊場景仍具實用價值。