步步看懂

Insertion Sort

插入排序

用互動動畫一步步看懂插入排序(Insertion Sort):自訂陣列、逐步顯示比較與位移,並對照最佳與最差情況的次數。

502142631435
比較次數
0
位移次數
0

插入排序在做什麼

想像你在整理手上的撲克牌:每次從桌上拿一張新牌,往左邊已經排好的牌裡找位置,把比它大的牌往右挪一格,再把新牌放進空出來的位置。

演算法做的就是這件事:

  1. 把陣列的左邊一段視為「已排序」,一開始只有第一個數字。
  2. 取出下一個數字當作待插入值(key),原位置留下空位。
  3. 由右往左比較:比 key 大的數字就往右位移一格,空位跟著往左移。
  4. 遇到不比 key 大的數字(或到了最左邊),就把 key 放進空位。
  5. 重複直到全部數字都處理完。

為什麼最佳情況只要 O(n)

如果資料本來就排好了,每個 key 只會跟左邊那一個數字比一次就停下來,完全不用位移。試試上方的「最佳情況」,比較次數是 n − 1、位移次數是 0。

反過來,「最差情況」是完全反序:每個 key 都要一路位移到最左邊,比較與位移都是 n(n − 1) / 2 次。

複雜度

最佳O(n)
平均O(n²)
最差O(n²)
額外空間O(1)
穩定是

常見問題

插入排序和氣泡排序哪個比較快?
兩者平均與最差都是 O(n²),但插入排序通常比較快,因為它只做「位移」而不是反覆「交換」,而且在資料已大致排好時接近 O(n)。
插入排序什麼時候最適合用?
資料量小,或資料已經幾乎排好時。許多標準函式庫的排序在處理小區段時,會改用插入排序。
插入排序是穩定的嗎?
是。遇到相等的值時不會越過它,所以相等元素的相對順序不變。