6.3 插入排序
阿新 • • 發佈:2018-07-04
下標 color 簡單 新元素 結果 最優 過程 print 元素
(1)插入排序:
插入排序(英語:Insertion Sort)是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,需要反復把已排序元素逐步向後挪位,為最新元素提供插入空間。
(2)插入排序分析:
(3)代碼實現:
1 # 方法一: 2 def insert_sort1(alist): 3 """插入排序""" 4 n = len(alist) 5 for j in range(1, n): # j的範圍:1 ~ n-16 i = j # i代表內層循環的起始值,從右邊的無序序列中取出一個元素,插入到前面的正確位置中 7 while i > 0: 8 if alist[i] < alist[i-1]: 9 alist[i], alist[i-1] = alist[i-1], alist[i] 10 i -= 1 11 else: 12 break # 插入算法的優化 13 14 # 方法二: 15def insert_sort2(alist): 16 # 從第二個位置,即下標為1的元素開始向前插入 17 for i in range(1, len(alist)): 18 # 從第i個元素開始向前比較,如果小於前一個元素,交換位置 19 for j in range(i, 0, -1): 20 if alist[j] < alist[j-1]: 21 alist[j], alist[j-1] = alist[j-1], alist[j] 22 23 if __name__ == "__main__": 24 li = [54, 26, 93, 17, 77, 31, 44, 55, 20] 25 print(li) 26 insert_sort1(li) 27 print(li) 28 print("-"*50) 29 30 li = [54, 26, 93, 17, 77, 31, 44, 55, 20] 31 print(li) 32 insert_sort2(li) 33 print(li) 34 print("-"*50)
(4)運行結果:
(5)時間復雜度:
最優時間復雜度:O(n) (升序排列,序列已經處於升序狀態)
最壞時間復雜度:O(n2)
穩定性:穩定
(6)插入排序演示:
6.3 插入排序