Python选择排序代码运行异常求助:结果不符预期,求排查问题
排查你的选择排序代码问题
嘿,我发现你的选择排序代码里有个关键小错误,导致排序结果完全偏离预期,咱们一步步拆解问题所在:
核心问题:内层循环的范围逻辑错误
选择排序的核心逻辑是:外层循环确定当前要填充的位置i,内层循环从i+1开始往后遍历,找到剩余未排序元素中的最小值,再和i位置的元素交换。
但你的代码里,内层循环写的是for j in range(len(aList)),这会让j从0开始遍历整个列表,而非从i+1的位置启动。这就导致每次内层循环都会把整个列表的最小值(包括前面已经排好序的元素)找出来,再和当前i位置交换,最终把最小的元素一步步“推”到列表末尾,完全搞反了排序方向。
另外,你前面写的j = i + 1其实是多余的,因为后面的for循环会重新定义j变量,这行代码根本起不到作用。
修正后的代码
aList = [1,5,6,3] def selection_sort(aList): for i in range(len(aList)): min_index = i # 用min_index代替min,避免和内置函数重名 # 内层循环从i+1开始,仅遍历未排序的部分 for j in range(i + 1, len(aList)): if aList[j] < aList[min_index]: min_index = j swap(aList, min_index, i) print(aList) def swap(aList, x, y): temp = aList[x] aList[x] = aList[y] aList[y] = temp selection_sort(aList)
修正说明
- 把内层循环范围改成
range(i + 1, len(aList)),确保只在未排序的元素中找最小值,不会干扰前面已经排好序的部分。 - 将变量名
min改为min_index,避免和Python内置的min()函数重名,这属于良好的编码习惯,虽然不是导致错误的直接原因,但能避免潜在冲突。
现在运行修正后的代码,输入[1,5,6,3]就能得到正确的排序结果[1,3,5,6]啦~
内容的提问来源于stack exchange,提问作者Phils19
相关产品推荐
相关产品推荐

