1. 程式人生 > >6.3 插入排序

6.3 插入排序

下標 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-1
6 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 # 方法二: 15
def 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 插入排序