經過構建有序序列,對於未排序部分,在已排序序列中從後向前掃描,找到相應的位置並插入。
若是輸入序列已是排好序的話,插入排序出現最佳狀況。
若是輸入序列是逆序排列的,將出現最壞狀況。
若是比較操做的代價比交換操做大的話,能夠採用二分查找法來減小比較操做的次數,即二分查找插入排序。html
from random import shuffle nums = list(range(10)) shuffle(nums) # 將第一個元素做爲有序序列 for i in range(1, len(nums)): # 遍歷有序序列,每處理一趟固定一個元素 for j in range(i, 0, -1): # 當元素小於有序序列的最大值時,依次左移,將元素插入合適位置 if nums[j] < nums[j-1]: nums[j-1], nums[j] = nums[j], nums[j-1] # 若是元素大於等於有序序列最大值,則不動 else: break print(nums) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
參考:
https://zh.wikipedia.org/wiki/插入排序
http://www.cnblogs.com/fanyong/archive/2012/03/23/2413553.htmldom