Python 3.6选择排序迭代记录实现:返回含初始列表及迭代过程的新列表
修复选择排序的状态日志功能
我来帮你搞定这个选择排序的日志记录问题!你的代码目前返回空列表,主要有两个核心问题:没有记录初始数组状态,也没有在每轮迭代后保存当前数组的状态,而且直接引用原数组会导致日志里的内容被后续修改覆盖。
下面是修改后的完整代码:
def selectionSort(A): log = [] # 先记录初始数组的副本(必须用copy,避免后续修改影响日志) log.append(A.copy()) for i in range(0, len(A) - 1): minIndex = i for j in range(i+1, len(A)): if A[j] < A[minIndex]: minIndex = j if minIndex != i: A[i], A[minIndex] = A[minIndex], A[i] # 每轮外层循环结束后,记录当前数组的状态副本 log.append(A.copy()) return log num_list = [10, 9, 8, 7] print(selectionSort(num_list))
关键改动说明:
- 记录初始状态:一开始就把数组的副本加入日志,这是你期望的结果列表的第一个元素。
- 使用数组副本:必须用
A.copy()或者list(A)来创建数组的副本,而不是直接append原数组。因为列表是引用类型,直接append原数组的话,后续对A的修改会同步影响日志里的所有元素,最后日志里全是最终排序后的数组。 - 每轮迭代后记录状态:在外层循环的每次迭代结束后(不管有没有发生交换),都记录当前数组的状态,这样就能完整保存排序过程中每一步的完整迭代状态。
测试结果
运行上面的代码,输出结果为:
[[10, 9, 8, 7], [7, 9, 8, 10], [7, 8, 9, 10], [7, 8, 9, 10]]
完全符合你期望的格式:包含初始列表,以及每一轮迭代后的完整数组状态,直到最终排序完成。
内容的提问来源于stack exchange,提问作者ThePentagonOfficial
相关产品推荐
相关产品推荐

