1. 程式人生 > 實用技巧 >舞動演算法:插入排序

舞動演算法:插入排序

插入排序原理

  • 從第二個元素開始和前面的元素進行比較,如果前面的元素比當前元素大,則將前面元素 後移,當前元素依次往前,直到找到比它小或等於它的元素插入在其後面。

  • 然後選擇第三個元素,重複上述操作,直到最後一個元素。

插入排序特點

時間複雜度:插入排序同樣需要兩次循壞一個一個比較,故時間複雜度也為O(n^2)

空間複雜度:只需要常數個輔助單元,所以空間複雜度也為O(1)

不明白?跳個舞吧【https://www.bilibili.com/video/BV1xW411Y73Z?t=95

def insertion_sort(arr):
    # 獲取列表長度
    length = len(arr)

    
# 從第二個元素開始,即下標為 1 的元素,進行比較 for i in range(1, length): # 將當前值作為一個臨時變數儲存,用於值的比較交換 temp = arr[i] # 獲得當前值的前一個元素的下標 pre_index = i - 1 # 判斷前一個元素是否存在,並將它和當前值進行大小比較 while pre_index >= 0 and arr[pre_index] > temp: # 前一個元素值 大於 當前值時 #
將該前一個元素值,向後移一位,進行值的覆蓋 arr[pre_index + 1] = arr[pre_index] # 向前,再獲取下一個元素的下標 pre_index -= 1 # 當前一個元素值 小於 temp這個比較值時,temp會插入在這個元素值後面 arr[pre_index + 1] = temp return arr def insertion_sort2(arr): # 獲取列表長度 length = len(arr) for i in
range(1, length): # 設定當前值前一個元素的標識 j = i - 1 # 如果當前值小於前一個元素,則將當前值作為一個臨時變數儲存,將前一個元素後移一位 if arr[i] < arr[j]: temp = arr[i] arr[i] = arr[j] # 繼續往前尋找,如果有比臨時變數大的數字,則後移一位,直到找到比臨時變數小的元素或者達到列表第一個元素 j = j-1 while j >= 0 and arr[j] > temp: arr[j + 1] = arr[j] j = j-1 # 將臨時變數賦值給合適位置 arr[j + 1] = temp return arr list_1 = [5, 3, 4, 2, 1] print(insertion_sort2(list_1))