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

SelectionSort代码输出结果异常,请求技术排查与修正指导

问题排查与修正

核心问题分析

你的代码逻辑并非标准选择排序,而是尝试实现插入排序但存在多处致命错误,导致处理[3,10,2,5]时失败:

  1. prev_num逻辑完全错误:你用"上一个处理的元素值"判断当前元素是否直接追加到已排序列表,但实际需要将当前元素与已排序部分的所有元素比较。比如处理完2后,prev_num被设为2,后续处理5时,因5>2直接追加,忽略了5小于已排序部分最大值10的事实,导致5未被插入到正确位置。
  2. 遍历原列表时修改列表:循环for i in my_list中执行my_list.remove(i)和my_list.insert(index_num, i),会破坏迭代器的遍历顺序,导致元素处理错位。
  3. 依赖my_list.index(i)存在隐患:若列表中有重复元素,index()会返回第一个匹配项的索引,直接导致逻辑错误。

正确的选择排序实现

选择排序的核心逻辑是:将列表分为已排序和未排序两部分,每一轮从未排序部分找到最小值,与未排序部分的第一个元素交换位置,重复直到排序完成。

def selection_sort(my_list):
    n = len(my_list)
    # 遍历每个位置,作为已排序部分的末尾
    for i in range(n):
        # 找到未排序部分的最小元素索引
        min_idx = i
        for j in range(i+1, n):
            if my_list[j] < my_list[min_idx]:
                min_idx = j
        # 将最小元素与未排序部分的第一个元素交换
        my_list[i], my_list[min_idx] = my_list[min_idx], my_list[i]
    return my_list

# 测试用例
print(selection_sort([1, 3, 4, 2, 6, 5]))  # [1, 2, 3, 4, 5, 6]
print(selection_sort([3, 4, 2, 6]))        # [2, 3, 4, 6]
print(selection_sort([3, 7, 4, 1]))        # [1, 3, 4, 7]
print(selection_sort([3, 10, 2, 5]))       # [2, 3, 5, 10]

基于你的逻辑修正为插入排序

如果想保留你原本的插入思路,可调整为以下正确的插入排序实现:

def insertion_sort(my_list):
    new_list = []
    for num in my_list:
        # 遍历已排序列表,找到正确插入位置
        insert_pos = 0
        while insert_pos < len(new_list) and num > new_list[insert_pos]:
            insert_pos += 1
        new_list.insert(insert_pos, num)
    return new_list

# 测试用例
print(insertion_sort([1, 3, 4, 2, 6, 5]))  # [1, 2, 3, 4, 5, 6]
print(insertion_sort([3, 4, 2, 6]))        # [2, 3, 4, 6]
print(insertion_sort([3, 7, 4, 1]))        # [1, 3, 4, 7]
print(insertion_sort([3, 10, 2, 5]))       # [2, 3, 5, 10]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:31:04