1.插入排序的含義
- 類似撲克牌,假設認為0-0位置有序,再把0-1的位置變有序,迴圈直到所有的有序。每次拿取右側的數字,一個一個對比放到左側來。
2.示例程式碼
def insertion_sort(arr):
if arr is None or len(arr) < 2:
return
for i in range(1, len(arr)):
# 0 ~ i-1 有序,新來的是[i]向左看
# 遍歷一遍,把右側新的無序[i],向左側一個一個比較,放到合適的位置上
key = i - 1 # 當前數的前一個位置
# j+1是當前數
# 1 4 5 | 2 # 現在2是無序的
while key >= 0 and arr[key] > arr[key + 1]: # 5比2大嗎?
arr[key], arr[key + 1] = arr[key + 1], arr[key] # 交換後1 4 2 5
key -= 1 # 新的key是2的位置
# Example usage
arr = [3, 2, 1, 5, 4]
insertion_sort(arr)
print(arr) # Output: [1, 2, 3, 4, 5]
3.練習程式碼
def insertion_sort(arr):
n = len(arr)
for i in range(1,n):
key = i-1
while key >=0 and arr[key] > arr[key+1]: # 向左側冒泡
arr[key],arr[key+1] = arr[key+1],arr[key]
key -= 1
return arr
arr = [1,2,5,8,3]
print(insertion_sort(arr))
4.截圖
5.感悟
- 加油,總以為自己不行,實際上自己很厲害!
6.程式碼思路
- 感覺設定一個key更好理解。
7.參考文獻
動圖:https://www.runoob.com/w3cnote/insertion-sort.html
程式碼:https://github.com/algorithmzuo/algorithm-journey/blob/main/src/class004/SelectBubbleInsert.java
影片:https://www.bilibili.com/video/BV12P41147to/?spm_id_from=333.999.0.0&vd_source=6176e79b66461eb74da787cb8321925b