算法-Python 插入排序的循环过程

# 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]

第六次......
"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值