插入排序

通过构建有序序列,对于未排序部分,在已排序序列中从后向前扫描,找到相应的位置并插入。
如果输入序列已经是排好序的话,插入排序出现最佳情况。
如果输入序列是逆序排列的,将出现最坏情况。
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的次数,即二分查找插入排序。

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.html

posted @ 2018-08-22 14:00  KeithTt  阅读(152)  评论(0编辑  收藏  举报