Python冒泡排序代码需求:生成与指定输出完全匹配的实现
冒泡排序过程匹配解决方案
问题背景
需要实现升序冒泡排序,要求每一轮排序的所有比较步骤完成后都输出当前数组状态(无论是否发生元素交换)。给定输入样例:
45 22 34 79 23
需生成与题目一致的10行输出样例。原代码仅在元素交换时输出数组,无法满足要求。
正确实现代码
l = list(map(int, input().split())) n = len(l) # 外层循环:控制排序轮数,共n-1轮 for i in range(n - 1): # 内层循环:每轮比较次数递减,末尾i个元素已排好序无需比较 for j in range(n - 1 - i): # 比较并交换(如果需要) if l[j] > l[j + 1]: l[j], l[j + 1] = l[j + 1], l[j] # 无论是否交换,都输出当前数组状态 print(*l)
代码解释
原代码的核心缺陷是仅在交换元素时输出数组,而题目要求每一次相邻元素比较完成后,不管有没有交换,都要输出当前数组,这是匹配样例的关键:
- 外层循环:冒泡排序最多需要
n-1轮排序,每轮会把当前未排序区间的最大元素"冒泡"到末尾位置。 - 内层循环:每轮的比较次数随轮数递增而递减(
n-1-i),因为每轮结束后,末尾的i个元素已经处于正确的有序位置,无需再参与比较。 - 输出逻辑:每次完成相邻元素的比较(及可能的交换)后,立即输出当前数组。这样就能完整记录所有比较步骤的数组状态,生成和样例完全一致的输出。
内容的提问来源于stack exchange,提问作者Viknesh TPK
相关产品推荐
相关产品推荐

