插入排序,和選擇排序很像,簡單的說就是和選擇排序的順序反一下,也是把列表看作兩部分,前面是排好序的,後面是無序的,遍歷這個列表,依次把數字往前面有序的那部分放,放進去的時候,再和前面的排序好的數字的最後一位開始比,如果大了,就交換位置,再繼續和前面的比,放到合適的位置。如此循環,把每個數字都放到該放的位置上。選擇排序就是在後面無序的裏面選好最小的,往前面依次放。插入排序就是依次去後面無序的,放到前面的時候,找到自己的位置。
第一種方法
def insert_sort(list):
n = len(list)
for i in range(1,n): # 從第二個元素開始取
for j in range(i,0,-1): # 遍歷前面的有序的,從有序的最後一個開始比,依次往前比,把後面依次取的數字放到該放的位置上
if list[j] < llist[j-1]: # 如果比前面的小,則交換位置
list[j], list[j-1] = list[j-1], list[j]
插入排序的最壞時間複雜度爲O(n^2),最優的話,我們來看下下面
第二種方法
def insert_sort(list):
n = len(list)
for i in range(1,n) :
while i > 0:
if list[i] < list[i-1]:
list[i], list[i-1] = list[i-1], list[i]
i -= 1
else:
break # 如果是有序的話,就退出while,這樣最好時間複雜度就是O(n)了