Python气泡排序-对元素进行多次排序

Python气泡排序-对元素进行多次排序,python,Python,其目的是获取一个正整数列表,并使用冒泡排序对其进行排序。每当您输入一个不需要多次移动单个元素的列表时,它就会工作。如何让它多次移动元素 例如,输入[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)

其目的是获取一个正整数列表,并使用冒泡排序对其进行排序。每当您输入一个不需要多次移动单个元素的列表时,它就会工作。如何让它多次移动元素

例如,输入[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]))

问题是,您只通过列表一次就返回了。等待
swapped
False

此外,在进行切换时,必须设置
已交换

    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
语句,因为您永远无法访问它,而这应该是调用程序的工作。

问题是,您只通过列表一次就返回了。等待
swapped
False

此外,在进行切换时,必须设置
已交换

    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
语句,因为您永远无法访问它,而这应该是调用程序的工作。

当您进入while循环时,不应该将swapped设置为“false”,因为这样您只会对循环进行一次迭代。迭代整个列表时,如果没有更多交换,则应退出循环。

在进入while循环时,不应将swapped设置为“false”,因为这样您只能对循环进行一次迭代。当您迭代整个列表时,如果没有更多交换,您应该退出循环。

您从未重置
swapped
所以它只迭代列表一次?您从未重置
swapped
所以它只迭代列表一次?