📊 6 種演算法 · 各自獨立設定 · 逐步視覺化
排序演算法視覺化
每個演算法都有獨立的柱子數量、播放速度與操作按鈕,互不影響。
冒泡排序Bubble Sort
⏱ 均攤 O(n²)💾 O(1)✅ 穩定
反覆比較相鄰元素,若順序錯誤則交換,最大值像泡泡浮向末端。
步驟 1 / 0
選擇排序Selection Sort
⏱ 均攤 O(n²)💾 O(1)❌ 不穩定
每輪從未排序區掃描找出最小值,交換至已排序區末端。
步驟 1 / 0
插入排序Insertion Sort
⏱ 均攤 O(n²)💾 O(1)✅ 穩定
逐一取出元素,插入左側已排序序列的正確位置,如同整理手牌。
步驟 1 / 0
快速排序Quick Sort
⏱ 均攤 O(n log n)💾 O(log n)❌ 不穩定
選取 Pivot,小於放左、大於放右,遞迴分治左右子序列。
步驟 1 / 0
合併排序Merge Sort
⏱ 均攤 O(n log n)💾 O(n)✅ 穩定
分治法:遞迴對半拆分至單一元素,再將有序子序列兩兩合併。
步驟 1 / 0
堆積排序Heap Sort
⏱ 均攤 O(n log n)💾 O(1)❌ 不穩定
先建立最大堆積,重複取出堆頂(最大值)並重整堆,直到排序完成。
步驟 1 / 0
比較中
交換中
Pivot
當前最小
已就位
未處理
📊 複雜度對照表
| 演算法 | 平均時間 | 最壞時間 | 空間 | 穩定 |
|---|---|---|---|---|
| 冒泡排序 | O(n²) | O(n²) | O(1) | ✅ |
| 選擇排序 | O(n²) | O(n²) | O(1) | ❌ |
| 插入排序 | O(n²) | O(n²) | O(1) | ✅ |
| 快速排序 | O(n log n) | O(n²) | O(log n) | ❌ |
| 合併排序 | O(n log n) | O(n log n) | O(n) | ✅ |
| 堆積排序 | O(n log n) | O(n log n) | O(1) | ❌ |
❓ 常見問題
O(n²) 和 O(n log n) 的效率差距有多大?
以 n=1,000 為例:O(n²) 約 1,000,000 次操作;O(n log n) 只需約 10,000 次,差了 100 倍。n=1,000,000 時差距更達萬倍。
快速排序最壞是 O(n²),為什麼還常用?
當每次隨機選 Pivot 時,觸發最壞情況的機率極低,平均表現是 O(n log n),且 cache 效能好,實際執行速度通常優於合併排序。
插入排序何時勝過快速排序?
當資料幾乎有序時,插入排序接近 O(n)。Python 的 Timsort 就在小區段或近似有序時切換到插入排序。
「穩定排序」是什麼意思?
相同值的元素排序後仍保持原本相對順序。冒泡、插入、合併是穩定的;選擇、快速、堆積不穩定。