modified_selection_sort函数输出异常求助:需按外层循环迭代输出列表
问题分析与修正
你的代码存在两个核心问题:
- 打印时机错误:你把
print(A)放在了内层j循环里,导致每次内层迭代都打印列表,而题目要求外层循环每完成一次迭代后打印一次,总共输出N-1次。 - 排序逻辑不符合要求:题目要求每次将当前未排序部分的最大元素交换到末尾,而你的代码同时寻找最小和最大元素并交换,这会导致排序过程混乱,不符合题目指定的排序步骤。
修正后的代码
def modified_selection_sort(A: list): n = len(A) # 外层循环:从末尾往前确定最大元素的位置,共执行n-1次迭代 for i in range(n-1, 0, -1): max_idx = 0 # 内层循环:在0到i的未排序范围内找最大元素的索引 for j in range(1, i+1): if A[j] > A[max_idx]: max_idx = j # 将最大元素交换到当前未排序部分的末尾(索引i的位置) A[max_idx], A[i] = A[i], A[max_idx] # 外层迭代完成后打印当前列表 print(A) numbers = [int(number) for number in input().split()] modified_selection_sort(numbers)
代码说明
- 外层循环
range(n-1, 0, -1):从最后一个索引开始逐步往前处理,每次处理完后,索引i的位置就固定了当前未排序部分的最大元素,刚好执行n-1次,对应输出n-1次列表。 - 内层循环:在
0到i的未排序区间内,遍历找到最大元素的索引。 - 交换操作:把找到的最大元素和当前未排序部分的末尾元素交换,完成一次排序步骤。
- 打印操作:放在外层循环末尾,每次交换完成后打印列表,完全符合题目要求的输出格式。
测试输入30 40 20 10,输出结果为:
[30, 10, 20, 40] [20, 10, 30, 40] [10, 20, 30, 40]
与预期输出完全匹配。
内容的提问来源于stack exchange,提问作者degeneratematter
相关产品推荐
相关产品推荐

