Python插入排序算法:为何要执行i = i - 1操作?
插入排序中
i = i - 1的作用解释 插入排序的核心逻辑是:把当前遍历到的元素,向前逐个比较,直到找到它应该在的位置(前面的元素都不大于它)。这段代码里的i = i - 1就是实现持续向前比较的关键。
结合代码里的while循环来看:
当list_a[i-1] > value_to_sort时,程序会交换list_a[i]和list_a[i-1]的位置——这一步只是把当前元素往前挪了一位,但它可能还需要继续往前(比如前面还有比它大的元素)。这时候把i减1,就能让下一次循环检查新位置的前一个元素(也就是现在i-1的位置,对应原来的i-2)和value_to_sort的大小关系。
拿你提供的列表[3,2,5,7,4,1]举个具体例子:
当循环到i=5时,value_to_sort是1:
- 第一次
while:list_a[4]=4>1,交换后列表变成[3,2,5,7,1,4],执行i = i -1后i变成4; - 第二次
while:检查list_a[3]=7>1,交换后列表变为[3,2,5,1,7,4],i变成3; - 第三次
while:list_a[2]=5>1,交换后列表是[3,2,1,5,7,4],i变成2; - 第四次
while:list_a[1]=2>1,交换后列表是[3,1,2,5,7,4],i变成1; - 第五次
while:list_a[0]=3>1,交换后列表是[1,3,2,5,7,4],i变成0; - 此时
i>0的条件不满足,while循环结束,1成功插到了列表的最前面,也就是它的正确位置。
如果没有i = i -1,交换之后i还是原来的数值,下一次循环会重复比较同一个位置的元素,要么陷入死循环,要么无法把元素挪到真正合适的位置,插入排序的逻辑就失效了。
内容的提问来源于stack exchange,提问作者user19930097
相关产品推荐
相关产品推荐

