Skip to content
本站總訪問量
本站訪客數 人次

Insertion Sort(插入排序法)

介紹

工作原理:

  1. 初始化:將第一個元素視為已排序的部分。
  2. 逐步插入:從第二個元素開始,將其與已排序部分中的元素進行比較。
  3. 重複:重複上述步驟,直到所有元素都被插入到正確的位置。

排序過程示例

假設有一串數字:7,5,9,1,3。以下是插入排序的具體過程:

  • 第一輪:取出7,放到已排序的部分7,不需移動,保持不變。
  • 第二輪:已排序部分為 7,取出5,將5插入到7之前,變為 5,7,9,1,3
  • 第三輪:已排序部分為 5,7,取出9,因為9大於7,不需移動,保持不變。
  • 第四輪:已排序部分為 5,7,9,取出1,放到已排序的最前面,變為 1,5,7,9,3
  • 第五輪:已排序部分為 1,5,7,9,取出3,將3插入到5之前。
  • 最終結果為 1,3,5,7,9

範例程式碼

python
def insertion_sort(arr):
    for i in range(1, len(arr)):
        current_value = arr[i]
        j = i - 1
        # 尋找合適的位置並移動較大的元素
        while j >= 0 and arr[j] > current_value:
            arr[j + 1] = arr[j]
            j -= 1
        # 插入當前值
        arr[j + 1] = current_value

# 測試
my_list = [7, 5, 9, 1, 3]
insertion_sort(my_list)
print("排序後的數列:", my_list)
python
def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            # print(arr)
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key


arr = [64, 25, 12, 22, 11]
print("未排序數列:", arr)
sorted_arr = insertion_sort(arr)
print("插入排序後的數列:", sorted_arr)

特點

  • 時間複雜度

    • 最佳情況:O(n),當數據已經排好序時。
    • 最壞情況:O(n2),當數據完全逆序時。
    • 平均情況:O(n2)
  • 空間複雜度O(1),因為它是原地排序演算法,不需要額外的空間。

  • 穩定性:插入排序是一種穩定的排序演算法,相同值的元素在排序後相對位置不會改變。

學習資源

Contributors

The avatar of contributor named as lucashsu95 lucashsu95

Changelog