iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Software Development

快速掌握資料結構與演算法系列 第 15

(Day 15) 基礎排序演算法比較

  • 分享至 

  • xImage
  •  

在前面三天,我們分別介紹了氣泡排序 (Bubble Sort)、選擇排序 (Selection Sort)、插入排序 (Insertion Sort)。這三個演算法都是經典的「基礎排序」,時間複雜度同樣是 $O(n^2)$,但它們在設計思路、操作方式、適用場景上各有不同。今天我們就來做一次系統化的分析比較。

設計思路

  • 氣泡排序 (Bubble Sort): 核心概念是「交換相鄰元素」,每一輪把最大(或最小)的元素一步步冒泡到邊界。
  • 選擇排序 (Selection Sort): 核心概念是「每輪選出極值」,然後與前端位置交換。
  • 插入排序 (Insertion Sort): 核心概念是「維持已排序區」,每次將新元素插入到正確位置。

可以看到,三者的直覺都很容易理解:

  • 氣泡像是把氣泡推到最上面。
  • 選擇像是比賽排名,每次挑出最小值。
  • 插入像是整理撲克牌,每張牌插到正確位置。

演算法流程比較

演算法 核心操作 一輪結束的效果
氣泡排序 交換相鄰元素 把最大元素移到最後
選擇排序 找最小值並交換 把最小元素移到最前
插入排序 插入到有序區 維持前半段總是有序

複雜度分析

演算法 最佳情況 平均情況 最壞情況 空間複雜度 穩定性
氣泡排序 $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)$,不適合大規模資料

適用場景

  • 氣泡排序: 適合教學與理解「交換」的概念,不適合實務使用。
  • 選擇排序: 在「交換成本高」但「比較成本低」的場景可能有用,但實務上幾乎被淘汰。
  • 插入排序:
    • 適合小型資料集 (例如幾十筆以內)。
    • 適合幾乎有序的資料。
    • 常用於複雜排序演算法 (如 QuickSort、Timsort) 的子程序,提升效率。

總結

氣泡、選擇、插入三種排序演算法雖然都屬於 $O(n^2)$,但它們代表了三種不同的思路:

  • 氣泡: 反覆比較相鄰元素 → 強調交換操作。
  • 選擇: 每次挑選極值 → 強調選拔策略。
  • 插入: 逐步建立有序區 → 強調元素移動與插入。

在教學上,這三種演算法是理解排序的最佳起點,幫助我們掌握不同的思考角度。在實務上,雖然它們幾乎不會直接使用,但插入排序在某些特殊場景仍具實用價值。


上一篇
(Day 14) 插入排序 (Insertion Sort)
下一篇
(Day 16) 二元搜尋 (Binary Search)
系列文
快速掌握資料結構與演算法16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言