【问题标题】:Bubble sorting algorithm while loop functionality冒泡排序算法while循环功能
【发布时间】:2017-09-20 16:02:58
【问题描述】:

对于 Python 中的以下排序算法,我不了解 while 循环的功能。紧跟在“whilesortingComplete 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()

【问题讨论】:

  • 每次迭代只检查一次条件,在while 行。

标签: algorithm python-2.7 sorting while-loop bubble-sort


【解决方案1】:

循环的工作方式是,一旦您进入循环(即一旦满足循环的条件),我们将执行循环中的所有指令/语句,然后再次检查现在是否 条件满足退出循环。

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

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

当我们退出 for 循环时(当 number = my_list 数组的大小 - 1 时),我们到达了 while 循环的末尾,因为 for 循环中的 if 语句的值sortingComplete 现在设置为 False,因此当需要检查 while 循环 条件 (if sortingComplete not True) 时,代码会从 sortingComplete = False 开始重复。

while 循环在 my_list 数组按升序排序时结束。即if 中的if 语句条件 从不满足(从不为真),这意味着当前位置编号值始终小于或等于my_list 中的下一个位置编号值数组。

希望这可以为您解决问题。

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2015-01-17
    • 2021-07-18
    • 2016-08-31
    • 2014-04-17
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多