我正在写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来查看它是否正在运行)。递归是必要的:我知道没有它就该怎么做。这只是递归部分,无论如何会搞砸。
答案 0 :(得分:0)
你的直觉是正确的。实际上,您的代码适用于我(一旦方法内容缩进):http://codepad.org/ILCH1k2z
根据您的特定Python安装,由于您的变量名称,您可能会遇到问题。在Python中,list
是一个保留字(它是列表的构造函数)。通常,使用保留字作为变量名称不被认为是好的形式。尝试重命名变量并查看代码是否正确运行。
答案 1 :(得分:0)
尝试像这样缩进
#!/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个或更少元素的测试也是不必要的,因为它不会进入循环。