经过构建有序序列,对于未排序部分,在已排序序列中从后向前扫描,找到相应的位置并插入。
若是输入序列已是排好序的话,插入排序出现最佳状况。
若是输入序列是逆序排列的,将出现最坏状况。
若是比较操做的代价比交换操做大的话,能够采用二分查找法来减小比较操做的次数,即二分查找插入排序。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