认为列表有两部分,一部分有序,一部分无序;有序此时默认的是第一个元素。然后用后面的无序序列中的第一个和有序序列比较,从后往前比较,看看是不是比前面的元素小,小就互换。
# 插入函数
# 插入排序可以看成选择排序和冒泡排序的组合,
# 放入有序队列中进行两两比较,
# (先与然第一个值比较,后往后(+1)比较)互换位置,
# 用后面无序列表中的第一个值和有序列表比较,
# 在有序列表中进行冒泡排序
# 排序排n-1次,比较n-1次(第一次就一个值,必定有序)
def insert_sort(alist):
# 内部排序
n = len(alist)
# i用来控制每次放进有序列表的值,
# 用后面无序列表中的第一个值和有序列表比较,
# 等于n是因为第一个值也参与进判断,尽管第一次就一个值,必定有序
for i in range(n):
# print('外部:'+str(i))
# 内部冒泡排序时,i的大小刚好是每一次把无序列表的
# 一个数值放进有序列表后有序列表的长度,
# 从i开始到0,每次增长-1,也就是减少1,
# 如第一次循环,0到0之间,第一个值必定在有序列表中,
# 第二次从1到0之间,冒泡排序比较两个值
# 第三次2到0之间,冒泡