首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算泡沫中的掉期数量?

计算泡沫中的掉期数量?
EN

Stack Overflow用户
提问于 2021-04-05 08:32:48
回答 1查看 40关注 0票数 0

我是Python的新手,任务是使用两个函数bubble_up和bubble_sort来计算程序中执行的交换和排序总数。我知道总交换循环有一个问题,我需要在我的代码中修改什么才能让它输出一行总交换循环,而不是显示每次冒泡排序迭代的交换次数。

代码:

代码语言:javascript
复制
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()

这是我的输出:

代码语言:javascript
复制
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]

这就是我想要的输出:

代码语言:javascript
复制
Total swaps:  15
Total bubble ups:  6
[1, 2, 3, 4, 5, 6]
EN

回答 1

Stack Overflow用户

发布于 2021-04-05 09:14:13

问题是你在bubble_up中计算total_swaps,一般来说,函数的内部变量在函数返回的瞬间就会被擦除,除非你使用静态变量(你可以阅读更多关于它们的here)。

因此,bubble_upswaps添加到total_swaps ( 0),打印total_swaps,然后返回my_list并忘记swapstotal_swaps,因为打印是在bubble_up内部进行的,每次调用函数时,它都会打印一行。

有几种方法可以解决这个问题:

  • swaps中返回bubble_up,并在全局变量中携带总计数,以便bubble_sort函数也可以识别它。
  • 使用静态变量,这样每次调用函数bubble_up时,总和都不会重置为0,并且仅在适当的时候打印,以避免多次打印。

还要注意,bubble_up返回my_list,但在bubble_sort中没有任何东西接收该返回。

既然你说这是一个任务,我不会分享代码,如果你愿意,你可以实现所有的修复,这样你就可以在你的代码库中添加更多的工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66947043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档