python中的气泡问题

时间:2015-12-05 18:21:50

标签: python recursion bubble-sort

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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