插入排序 (Insertion Sort) 也是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
假設有一個陣列 $A = [5, 2, 4, 6, 1, 3]$,插入排序的過程如下:
步驟 | 陣列狀態 |
---|---|
初始 | 5, 2, 4, 6, 1, 3 |
1 | 2, 5, 4, 6, 1, 3 |
2 | 2, 4, 5, 6, 1, 3 |
3 | 2, 4, 5, 6, 1, 3 |
4 | 1, 2, 4, 5, 6, 3 |
5 | 1, 2, 3, 4, 5, 6 |
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
# 測試
print(insertion_sort([5, 2, 4, 6, 1, 3]))
優點 | 缺點 |
---|---|
實作簡單 | 效率較低,適合小型資料集 |
穩定排序 | 不適合大型資料集 |
插入排序雖然與氣泡排序、選擇排序一樣屬於 O(n^2) 的基礎排序演算法,但它的特性更貼近「人類整理資料」的直覺思維:就像整理撲克牌一樣,每次抽一張牌,插入到已經排好的手牌中。
它的最大優勢在於:
不過它的瓶頸也很明顯:在大型或高度無序的資料上,仍然需要大量比較與移動,最壞情況下的複雜度依然是 O(n^2)。因此,在真實應用中,插入排序常被用於:
總體來說,插入排序是「簡單但不容忽視」的演算法。雖然它不是解決大型問題的最佳選擇,但它在小規模場景或混合演算法設計中,依然有獨特的價值。