03 插入排序

o蹲蹲o發表於2024-05-09

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.截圖

03 插入排序

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

相關文章