这样做的目的是获取一个正整数列表,并使用冒泡排序对其进行排序。只要您输入不需要将单个元素多次移动的列表,它就会起作用。如何使元素移动一次以上?
例如,输入[3,5,4,6,7]可以,但是输入[10,9,8,7,6]无效。
def bubbleSort(lis):
swapped = True
while swapped:
swapped = False
for i in range(0,len(lis)-1):
if lis[i] > lis[i + 1] or lis[i] == lis[i+1]:
switch = lis[i]
lis[i] = lis[i+1]
lis[i+1] = switch
return lis
print(lis)
print(bubbleSort([3,5,4,6,7]))
print(bubbleSort([10,9,8,7,6]))
答案 0 :(得分:3)
问题是您仅在通过列表之后返回。等待swapped
为False
。
此外,您必须在进行切换时设置swapped
。
swapped = True
while swapped:
swapped = False
for i in range(0,len(lis)-1):
if lis[i] > lis[i + 1] or lis[i] == lis[i+1]:
swapped = True
switch = lis[i]
lis[i] = lis[i+1]
lis[i+1] = switch
return lis
我删除了print
语句,因为您永远无法到达它,并且应该是调用程序的工作。
答案 1 :(得分:0)
当您进入while循环时,不应将swap设置为'false',因为那样您将仅循环执行一次迭代。遍历整个列表时,如果没有更多交换,则应该退出循环。