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

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)

修正说明

  1. 把内层循环范围改成range(i + 1, len(aList)),确保只在未排序的元素中找最小值,不会干扰前面已经排好序的部分。
  2. 将变量名min改为min_index,避免和Python内置的min()函数重名,这属于良好的编码习惯,虽然不是导致错误的直接原因,但能避免潜在冲突。

现在运行修正后的代码,输入[1,5,6,3]就能得到正确的排序结果[1,3,5,6]啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:54:45