Python实现selection sort输出结果不正确,请问错误出在哪里?
选择排序代码错误排查
核心错误点
你的代码交换逻辑的下标使用错误:
- 内层循环遍历完成后,已经定位到了未排序区间内最小元素的下标
mindex,按照选择排序逻辑,此时需要将最小元素和**当前未排序区间的首元素(下标为element)**交换,完成本轮排序 - 你代码中错误使用了内层循环的变量
compare_index做交换,内层循环结束时compare_index固定等于列表最后一个元素的下标,完全不是需要交换的目标位置,因此排序逻辑混乱。
修正方案
将原代码中交换元素的行:
element_list[compare_index], element_list[mindex] = element_list[mindex], element_list[compare_index]
修改为:
element_list[element], element_list[mindex] = element_list[mindex], element_list[element]
完整可运行修正代码
my_list = [64, 25, 12, 11, 32] def selection_sort(element_list): for element in range(len(element_list)): mindex = element for compare_index in range(element+1, len(element_list)): if element_list[mindex] > element_list[compare_index]: mindex = compare_index # 修正交换的下标 element_list[element], element_list[mindex] = element_list[mindex], element_list[element] for element in range(len(element_list)): print(element_list[element]) selection_sort(my_list)
运行输出
11 12 25 32 64
和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者Bogota
相关产品推荐
相关产品推荐

