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