我是Python的新手,任务是使用两个函数bubble_up和bubble_sort来计算程序中执行的交换和排序总数。我知道总交换循环有一个问题,我需要在我的代码中修改什么才能让它输出一行总交换循环,而不是显示每次冒泡排序迭代的交换次数。
代码:
def bubble_up(my_list):
swap = 0
total_swaps = 0
for i in range(len(my_list)-1):
if (my_list[i] > my_list[i+1]):
temp = my_list[i]
my_list[i] = my_list[i+1]
my_list[i+1] = temp
swap += 1
total_swaps += swap
print('Total swaps: ', total_swaps)
return my_list
def bubble_sort(my_list):
count = 0
has_swapped = True
while(has_swapped):
has_swapped = False
for j in range(len(my_list)):
bubble_up(my_list)
count += 1
print('Total bubble ups: ', count)
return my_list
my_list1 = [6, 5, 4, 3, 2, 1]
print(bubble_sort(my_list1))
print()这是我的输出:
Total swaps: 5
Total swaps: 4
Total swaps: 3
Total swaps: 2
Total swaps: 1
Total swaps: 0
Total bubble ups: 6
[1, 2, 3, 4, 5, 6]这就是我想要的输出:
Total swaps: 15
Total bubble ups: 6
[1, 2, 3, 4, 5, 6]发布于 2021-04-05 09:14:13
问题是你在bubble_up中计算total_swaps,一般来说,函数的内部变量在函数返回的瞬间就会被擦除,除非你使用静态变量(你可以阅读更多关于它们的here)。
因此,bubble_up将swaps添加到total_swaps ( 0),打印total_swaps,然后返回my_list并忘记swaps和total_swaps,因为打印是在bubble_up内部进行的,每次调用函数时,它都会打印一行。
有几种方法可以解决这个问题:
swaps中返回bubble_up,并在全局变量中携带总计数,以便bubble_sort函数也可以识别它。bubble_up时,总和都不会重置为0,并且仅在适当的时候打印,以避免多次打印。还要注意,bubble_up返回my_list,但在bubble_sort中没有任何东西接收该返回。
既然你说这是一个任务,我不会分享代码,如果你愿意,你可以实现所有的修复,这样你就可以在你的代码库中添加更多的工具。
https://stackoverflow.com/questions/66947043
复制相似问题