[演算法筆記]插入排序 Insertion-Sort
阿新 • • 發佈:2021-12-18
插入排序是把待排序資料(從第二個元素開始)插入到已經排序好的數列中。
基本方法:
從第二個數開始(第一個數不用比較排序,直接作為基準比較元素),建立錨點,每一步將一個待排序(從第二個數開始)元素(從第二個數開始),按其大小,迴圈與往面已排好序的進行比較,插入到前面已經排好序的元素的適當位置上去,直到最後一個元素全部插入為止,從小到大排序。
def InsertionSort(arr): for i in range(1,len(arr)): # 從第2個元素開始,依次作為待排序元素 print('第'+ str(i) + '次排序開始時:',arr) if arr[i] < arr[i-1]: # 小於前一元素,就等待插入到前面的位置 temp = arr[i] for j in range(i,-1,-1): # 前面的元素大於待排序元素,就大數往後移動一位 if arr[j-1] > temp and j > 0: arr[j] = arr[j-1] print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移動結束時:',arr) else: arr[j] = temp # 前面不存在更大數或者已經到第一位數,插入待排序元素 print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移動結束時:',arr) break return arr a = [2,8,4,6,1,9,7,5,0,3] print('插入排序結果為:',InsertionSort(a))
====================== RESTART: test.py ====================== 第1次排序開始時: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3] 第2次排序開始時: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3] 第2次排序,第3位元素移動結束時: [2, 8, 8, 6, 1, 9, 7, 5, 0, 3] 第2次排序,第2位元素移動結束時: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3] 第3次排序開始時: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3] 第3次排序,第4位元素移動結束時: [2, 4, 8, 8, 1, 9, 7, 5, 0, 3] 第3次排序,第3位元素移動結束時: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3] 第4次排序開始時: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3] 第4次排序,第5位元素移動結束時: [2, 4, 6, 8, 8, 9, 7, 5, 0, 3] 第4次排序,第4位元素移動結束時: [2, 4, 6, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第3位元素移動結束時: [2, 4, 4, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第2位元素移動結束時: [2, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第1位元素移動結束時: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第5次排序開始時: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第6次排序開始時: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第6次排序,第7位元素移動結束時: [1, 2, 4, 6, 8, 9, 9, 5, 0, 3] 第6次排序,第6位元素移動結束時: [1, 2, 4, 6, 8, 8, 9, 5, 0, 3] 第6次排序,第5位元素移動結束時: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3] 第7次排序開始時: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3] 第7次排序,第8位元素移動結束時: [1, 2, 4, 6, 7, 8, 9, 9, 0, 3] 第7次排序,第7位元素移動結束時: [1, 2, 4, 6, 7, 8, 8, 9, 0, 3] 第7次排序,第6位元素移動結束時: [1, 2, 4, 6, 7, 7, 8, 9, 0, 3] 第7次排序,第5位元素移動結束時: [1, 2, 4, 6, 6, 7, 8, 9, 0, 3] 第7次排序,第4位元素移動結束時: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3] 第8次排序開始時: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3] 第8次排序,第9位元素移動結束時: [1, 2, 4, 5, 6, 7, 8, 9, 9, 3] 第8次排序,第8位元素移動結束時: [1, 2, 4, 5, 6, 7, 8, 8, 9, 3] 第8次排序,第7位元素移動結束時: [1, 2, 4, 5, 6, 7, 7, 8, 9, 3] 第8次排序,第6位元素移動結束時: [1, 2, 4, 5, 6, 6, 7, 8, 9, 3] 第8次排序,第5位元素移動結束時: [1, 2, 4, 5, 5, 6, 7, 8, 9, 3] 第8次排序,第4位元素移動結束時: [1, 2, 4, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第3位元素移動結束時: [1, 2, 2, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第2位元素移動結束時: [1, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第1位元素移動結束時: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第9次排序開始時: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第9次排序,第10位元素移動結束時: [0, 1, 2, 4, 5, 6, 7, 8, 9, 9] 第9次排序,第9位元素移動結束時: [0, 1, 2, 4, 5, 6, 7, 8, 8, 9] 第9次排序,第8位元素移動結束時: [0, 1, 2, 4, 5, 6, 7, 7, 8, 9] 第9次排序,第7位元素移動結束時: [0, 1, 2, 4, 5, 6, 6, 7, 8, 9] 第9次排序,第6位元素移動結束時: [0, 1, 2, 4, 5, 5, 6, 7, 8, 9] 第9次排序,第5位元素移動結束時: [0, 1, 2, 4, 4, 5, 6, 7, 8, 9] 第9次排序,第4位元素移動結束時: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 插入排序結果為: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]