【发布时间】: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