You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python插入排序函数输出异常,新手求修复指导

修复Python插入排序代码的问题

你的插入排序代码存在几个关键逻辑错误,导致输出异常,下面逐一说明并修复:

错误分析

  • while循环条件错误:你使用var > 0作为循环条件,但var是外层循环的固定变量,在while循环中不会变化,这会导致循环逻辑完全偏离预期。正确的条件应该是index >= 0,因为我们需要通过index指针往前遍历已排序的区间。
  • 错误的赋值操作:sorting = numbers[var+1]完全违背插入排序逻辑,这会错误覆盖当前要插入的目标值,甚至在var为列表最后一个元素时触发索引越界。插入排序的核心是将比当前元素大的已排序元素向后移动,而非交换后重新赋值。
  • 未更新index指针:while循环内没有递减index,导致始终和同一个位置的元素比较,无法往前遍历已排序区间,进而引发重复赋值的异常。

修复后的代码

def sorting_by_insertion(numbers):
    for var in range(1, len(numbers)):
        sorting = numbers[var]  # 取出当前待插入的元素
        index = var - 1
        # 遍历已排序区间,找到插入位置
        while index >= 0 and numbers[index] > sorting:
            numbers[index + 1] = numbers[index]  # 将大于当前元素的值后移
            index -= 1  # 指针向前移动
        numbers[index + 1] = sorting  # 将当前元素插入正确位置

numbers = [8, 5, 1, 3, 7]
print('The list of numbers will be', numbers, 'when unsorted')
sorting_by_insertion(numbers)
print('The list of numbers will be', numbers, 'when sorted')

运行结果

The list of numbers will be [8, 5, 1, 3, 7] when unsorted
The list of numbers will be [1, 3, 5, 7, 8] when sorted

逻辑说明

  1. 外层循环从第二个元素(索引1)开始,因为单个元素默认属于已排序区间。
  2. 取出当前待插入元素sorting,用index指向已排序区间的最后一个元素。
  3. while循环中,只要index未越界且当前元素大于sorting,就将该元素向后移动一位,同时index递减。
  4. 循环结束时,index+1就是sorting的正确插入位置,完成赋值即可。

内容的提问来源于stack exchange,提问作者user22745935

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:50:11