冒泡排序算法 while 循环功能

Bubble sorting algorithm while loop functionality

对于Python中的以下排序算法,我不明白while循环是如何工作的。紧跟在行 "while sortingComplete is not True:" 之后的是行 sortingComplete = True。后一行不满足 while 循环的条件,因此它应该退出 while 循环吗?为什么即使在下一行中将 sortingComplete 更改为 True,代码仍会继续执行?

def main():
    sort_list()

def sort_list():
    my_list = [3,4,5,6,4,3,2,5,6,7,8,6,4,3,5,4,4,5,6]
    print "my_list:       ", my_list
    sortingComplete = False
    while sortingComplete is not True:
        sortingComplete = True
        for number in range(len(my_list)-1):
            if my_list[number+1] < my_list[number]:
                sortingComplete = False
                my_list[number], my_list[number+1] = my_list[number+1], my_list[number]

print "Sorted my_list:", my_list

if __name__ == '__main__':
    main()

循环的工作方式是一旦你进入一个循环(即一旦满足循环的条件)我们执行循环之前的所有instructions/statements我们再次检查现在是否满足 条件 以退出循环。

在这种情况下,在我们进入 while 循环之前,条件 sortingComplete 设置为 False。因此,即使下一行 sortingComplete = True 更改了 sortingComplete 变量的值,在我们可以检查是否满足 条件 之前,我们仍然需要执行其余语句或不退出循环。您的 while 循环内部有另一个循环,即 for 循环。

for 循环逐个遍历数组的每个位置,直到倒数第二个位置。每次检查当前位置编号是否大于my_list数组中的下一个位置编号(我假设你了解冒泡排序的工作原理,所以我不会详细介绍)。在数组排序完成和完善之前,for 循环中的 if 语句也将为真,并且此 if 语句总是将 sortingComplete 的值更改为 False

当我们退出 for 循环时(当数字 = my_list 数组的大小 - 1 时)我们到达 while 循环的结尾,因为 if for 循环中的语句 sortingComplete 的值现在设置为 False 所以当需要检查 while 循环时 condition (if sortingComplete not True) 代码从 sortingComplete = False.

开始重复

my_list数组按升序排序时,while循环结束。即if语句for中的条件永远不会满足(永远不会为真),意思是当前位置数值总是小于或等于下一个位置my_list 数组中的数字值。

希望这能帮您解决问题。