python中的bubble问题



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

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来查看它是否在运行)。递归是必要的:我知道没有它怎么做。无论如何,递归部分都会搞砸。

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

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

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个或更少的元素也是不必要的,因为它不会进入循环。

最新更新