【问题标题】:trouble with bubble in pythonpython中的气泡问题
【发布时间】:2016-03-10 14:48:27
【问题描述】:

我正在用 python 编写代码,我想我可能会尝试使用递归来创建冒泡排序。我的想法是,因为最右边的元素总是在每次迭代后排序(list[-1]),所以我将该元素添加到我的其余元素(bubbleSort(list[:-1])) 的另一个冒泡排序调用中。这是我的代码:

def bubbleSort(list):
sorted = True
i = 0
if len(list) <= 1:
    return list

while i < len(list) - 1:
    if list[i] > list[i+1]:
        temp = list[i+1]
        list[i+1] = list[i]
        list[i] = temp
        sorted = False
    i = i + 1

if sorted:
    return list
else:
    endElement = list[-1]
    return bubbleSort(list[:-1]) + [endElement]

但是,它只返回排序的第一次迭代,尽管它在每次迭代中都运行(我在代码中使用了 print 来查看它是否正在运行)。递归是必要的:我知道没有它怎么做。无论如何,这只是递归部分。

【问题讨论】:

  • 请正确格式化您的代码。
  • Bubble Sort Homework的可能重复
  • 作为单独的说明,您的代码很昂贵,因为它在每个递归步骤中创建一个新列表。考虑每次都传递完整列表以及您需要排序的子列表的结束索引,例如bubbleSort(listToSort, subListIndex)。然后,在每个递归步骤中,您只需调用bubbleSort(listToSort, subListIndex-1)。这也将允许您简化基本情况检查。

标签: python recursion bubble-sort


【解决方案1】:

你的直觉是正确的。事实上,你的代码对我有用(一旦方法内容被缩进):http://codepad.org/ILCH1k2z

根据您的特定 Python 安装,您可能会因变量名而遇到问题。在 Python 中,list 是一个保留字(它是列表的构造函数)。一般来说,使用保留字作为变量名不被认为是好的形式。尝试重命名你的变量,看看你的代码是否正确运行。

【讨论】:

    【解决方案2】:

    python 程序由缩进构成,而不是像 c 语言那样由括号构成。我认为这是您的代码的问题。

    试着像这样缩进

    #!/usr/env/python
    
    def bubble(lst):
        sorted = True
        for i in range(len(lst) - 1):
            if lst[i] > lst[i + 1]:
                temp = lst[i]
                lst[i] = lst[i + 1]
                lst[i + 1] = temp
                sorted = False
        if sorted:
            return lst
        else:
            return bubble(lst[:-1]) + [lst[-1]]
    

    你也不应该使用像list 这样的保留字作为变量名。

    列表是否包含 1 个或更少元素的测试也是不必要的,因为它不会进入循环。

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多