# encoding=utf-8
"""
插入排序
工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
当前值比已排序中的值大时,已排序的值往后排一步
"""
sort_list = [15, 5, 3, 17, 17, 9, 43, 6, 37]
for i in range(len(sort_list)):
pre_index = i - 1
current = sort_list[i]
while pre_index >= 0 and current < sort_list[pre_index]:
sort_list[pre_index + 1] = sort_list[pre_index]
pre_index -= 1
sort_list[pre_index + 1] = current
print(sort_list)
"""
代码执行过程:
第一次for循环:
pre_index=i-1 i=0
current = s[i] = 15
pre_index<0, 不符合条件不进入while循环
s[pre_index+1] = current s[0] = 15
[15, 5, 3, 17, 9, 43, 6, 37]
第二次for循环:
pre_index=i-1=0 i=1
current = s[i]=5
第一次进入while循环:
pre_index>=0, current < s[pre_index]
换位:s[pre_index+1]=s[pre_index]
pre_index -1
pre_index<0, 结束while循环
s[pre_index+1] = current s[0]=5
[5,15, 3, 17, 9, 43, 6, 37]
第三次for循环:
i = 2 ,pre_index=i-1=1
currnet = s[i] = 3
pre_index>=0 and current < s[pre_index] ,
换位:s[pre_index+1]=s[pre_index]
pre_index-1 =0
再比较下一个
pre_index>=0 and current < s[pre_index]
s[pre_index+1]=s[pre_index]
pre_index-1 =0 循环结束
s[pre_index+1] = current
[3,5,15, 17, 9, 43, 6, 37]
第四次for循环:
i=3, pre_index=i-1=2
current = s[i] =17
pre_index>=0 and current > s[pre_index] ,不进入循环
s[pre_index+1]=current
[3,5,15, 17, 9, 43, 6, 37]
第五次for循环:
i=4, pre_index=i-1=3
current = s[i] =9
pre_index>=0 and current < s[pre_index]=17
s[pre_index+1] = s[pre_index]
pre_index-1
比较下一个
pre_index=2>=0 and current < s[pre_index]=15
s[pre_index+1] = s[pre_index]
pre_index-1
pre_index=1>=0 and current > s[pre_index]=5
退出循环
s[pre_index+1]=current
[3,5,15, 17, 9, 43, 6, 37]
第六次......
"""
算法-Python 插入排序的循环过程
最新推荐文章于 2022-07-01 20:30:00 发布