首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >冒泡排序作业

冒泡排序作业
EN

Stack Overflow用户
提问于 2009-05-21 21:47:25
回答 24查看 112.2K关注 0票数 131

在课堂上,我们正在做排序算法,尽管我在谈论它们和编写伪代码时很好地理解了它们,但我在为它们编写实际代码时遇到了问题。

这是我在Python中的尝试:

代码语言:javascript
复制
mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 1
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
            else:
                unsorted = True

print bubble(mylist)

现在,这个(据我所知)是正确排序的,但是一旦它完成,它就会无限循环。

如何修复此代码,以便函数正确结束并正确地对任意(合理)大小的列表进行排序?

附注:我知道我不应该真的在一个函数中有打印,我应该有一个返回,但我还没有这样做,因为我的代码还不能真正工作。

EN

回答 24

Stack Overflow用户

发布于 2009-05-21 21:54:22

这就是当你使用负意义的变量名时会发生的事情,你需要反转它们的值。下面的内容会更容易理解:

代码语言:javascript
复制
sorted = False
while not sorted:
    ...

另一方面,算法的逻辑有点离谱。您需要检查在for循环期间是否交换了两个元素。下面是我将如何编写它:

代码语言:javascript
复制
def bubble(values):
    length = len(values) - 1
    sorted = False
    while not sorted:
        sorted = True
        for element in range(0,length):
            if values[element] > values[element + 1]:
                 hold = values[element + 1]
                 values[element + 1] = values[element]
                 values[element] = hold
                 sorted = False
    return values
票数 8
EN

Stack Overflow用户

发布于 2009-05-21 21:55:33

您使用未排序的变量是错误的;您希望有一个变量来告诉您是否交换了两个元素;如果您已经交换了两个元素,则可以退出循环,否则,您需要再次循环。要解决这里的问题,只需将"unsorted = false“放入if case的主体中;删除else case;并将"unsorted = true”放在for循环之前。

票数 7
EN

Stack Overflow用户

发布于 2009-05-21 23:17:23

代码语言:javascript
复制
def bubble_sort(l):
    for passes_left in range(len(l)-1, 0, -1):
        for index in range(passes_left):
            if l[index] < l[index + 1]:
               l[index], l[index + 1] = l[index + 1], l[index]
    return l
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/895371

复制
相关文章

相似问题

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