我有一个任务,输入将是一个列表,我的任务是对列表进行冒泡排序,以升序排列。这是我想要的输入和输出示例。
输入:
45 22 34 79 23
输出量:
22 45 34 79 23
22 34 45 79 23
22 34 45 79 23
22 34 45 23 79
22 34 45 23 79
22 34 45 23 79
22 34 23 45 79
22 34 23 45 79
22 23 34 45 79
22 23 34 45 79
然而,我尝试了一段代码,但它不工作,我试过:
l = list(map(int, input().split()))
swapped = True
while swapped:
swapped = False
for i in range(len(l) - 1):
if l[i] > l[i + 1]:
l[i] , l[i + 1] = l[i + 1], l[i]
swapped = True
print(*l)
我只是想知道Python代码和代码的解释,可以为我提供与赋值中的输出完全相同的结果。
3条答案
按热度按时间ruoxqz4g1#
算法是正确的,但输出与预期输出不对应,原因有二:
1.您的代码在交换发生时执行
print
,但我们可以从示例的预期输出中看到,有连续的行是副本,这表明我们需要在 no 交换发生时也进行打印。为此,您必须将print
移出if
块(取消缩进)修复后,输出中的行数将比预期的多。这就引出了第二个原因:
1.代码的内部循环总是将数据迭代到
len(l) - 1
,但这不是必需的。数组的右端将有一个排序的部分,在外部循环的每次迭代中,该部分至少会随着一个元素而增长,因此内部循环不需要迭代该排序的分区。因此,使该循环的迭代次数为动态的:每次从零开始执行循环时将其减1。例如,通过这些最小的调整,您的代码可以产生预期的输出:
现在,示例输入的输出将是:
tvmytwxo2#
代码来自https://www.programiz.com/dsa/bubble-sort
编辑:该网站有一个算法的解释
wko9yo5t3#
下面是修改后的代码:
下面给出了上述代码的解释:
1.读取输入并将数字拆分为列表l。
1.将n定义为列表的长度。这将在外部循环中使用。