对于下面的 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()
最佳答案
循环的工作方式是一旦你进入一个循环(即一旦满足循环的条件)我们执行循环中的所有指令/语句,然后再次检查现在是否 < strong>条件满足退出循环。
在这种情况下,在我们进入 while
循环之前,condition sortingComplete
设置为 False
。因此,即使下一行 sortingComplete = True
更改了 sortingComplete
变量的值,在我们可以检查是否 conditions 满足或不退出循环。您的 while
循环内部有另一个循环,即 for
循环。
for
循环逐个遍历数组的每个位置,直到倒数第二个位置。每次检查 当前位置编号是否大于 my_list
数组中的下一个位置编号(我假设您了解如何冒泡排序有效,所以我不会详细介绍)。在数组排序完成和完善之前,for
循环中的 if
语句也将为真,并且此 if
语句始终更改值sortingComplete
到 False
。
当我们退出 for
循环时(当 number = my_list 数组的大小 - 1 时)我们到达了 while
循环的结尾,因为
语句 for
循环中的 ifsortingComplete
的值现在设置为 False
所以当需要检查 while
循环 condition(if sortingComplete not True
)代码重复,因为 sortingComplete = False
。
当 my_list
数组按升序排序时,while
循环结束。即for
中的if
语句conditions永远不会满足(永远不会为真),意思是当前位置数值总是小于或等于my_list
数组中的下一个位置编号值。
希望这能为您解决问题。
关于algorithm - 冒泡排序算法 while 循环功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326842/