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)开始,因为单个元素默认属于已排序区间。
- 取出当前待插入元素
sorting,用index指向已排序区间的最后一个元素。 - while循环中,只要
index未越界且当前元素大于sorting,就将该元素向后移动一位,同时index递减。 - 循环结束时,
index+1就是sorting的正确插入位置,完成赋值即可。
内容的提问来源于stack exchange,提问作者user22745935
相关产品推荐
相关产品推荐

