如何解决Python排序代码中的‘list index out of range’(IndexError)错误?
排序算法的索引错误修正与逻辑完善
索引错误原因
你的代码中循环范围设为range(len(array)),当i遍历到len(array)-2时,i+2会超出列表的最大索引(列表索引从0开始,最大索引为len(array)-1),直接触发IndexError。正确的循环范围应该是range(len(array)-2),确保i+2不会越界。
排序逻辑问题
即便修复索引错误,原代码仅执行一轮相邻元素交换,无法完成完整排序。你想实现的应该是冒泡排序,这类排序需要多轮循环迭代,每轮将当前未排序段的最大元素“推”到末尾,且每轮的比较次数可逐步减少(末尾已排序的元素无需重复比较)。
修正后的完整代码
sort = [9, 7, 4, 5, 8, 3, 2, 1, 6, 10] def sort_array(array): # 复制数组避免修改原数据(按需选择) arr = array.copy() length = len(arr) # 外层循环控制排序轮数,n个元素最多需n-1轮 for i in range(length - 1): # 内层循环控制每轮比较次数,每轮少比较i次(末尾i个元素已排好序) for j in range(length - 1 - i): if arr[j] > arr[j + 1]: # 交换相邻元素 arr[j], arr[j + 1] = arr[j + 1], arr[j] print(arr) sort_array(sort)
关键说明
- 外层循环
range(length - 1):n个元素最多需要n-1轮排序,每轮确定一个最大元素的最终位置。 - 内层循环
range(length - 1 - i):每轮结束后,末尾i个元素已处于有序状态,无需再参与比较。 - 交换条件
arr[j] > arr[j + 1]:前元素大于后元素时交换,保证每轮结束后,当前未排序段的最大元素移动到段尾。
内容的提问来源于stack exchange,提问作者kdkj
相关产品推荐
相关产品推荐

