A-Level计算机科学插入排序代码报IndexError: list index out of range如何修复
插入排序IndexError: list index out of range 报错修复方案
错误原因
你代码里存在三个核心逻辑错误直接导致索引越界:
- 循环范围设置错误
for index in range (len(numbers))中index的最大值为len(numbers)-1,此时执行index + 1刚好等于列表长度,而Python列表的合法索引范围是0 ~ len(列表)-1,直接访问index + 1位置就会触发越界报错。 - 索引和元素值混淆
你把nextposition赋值为numbers[index + 1],这是列表的元素值,但后续代码全部把nextposition当成索引来使用(比如numbers[nextposition]),一旦元素值大于等于列表长度,必然触发越界。 - 插入排序的移位交换逻辑完全错误,不符合算法规则。
修复后可运行代码
numbers = [12,10,16,11,20] def InsertionSort(numbers): # 插入排序默认第一个元素为有序区,从第二个元素开始处理 for i in range(1, len(numbers)): # 保存当前待插入的元素值 current_value = numbers[i] # 前序有序区的最后一个元素索引 pre_index = i - 1 # 前序元素比当前值大的话,就把前序元素往后移 while pre_index >= 0 and numbers[pre_index] > current_value: numbers[pre_index + 1] = numbers[pre_index] pre_index -= 1 # 把当前值插入到空出来的位置 numbers[pre_index + 1] = current_value print(numbers) return numbers InsertionSort(numbers)
修改说明
- 循环起始点从1开始,避免访问索引超过列表范围
- 区分保存待插入元素值和前序索引,不会再出现把值当索引用的错误
- 调整为标准插入排序的移位逻辑,不需要多次交换元素,执行效率更高
内容的提问来源于stack exchange,提问作者Khushi Motwani
相关产品推荐
相关产品推荐

