algorithm - 冒泡排序算法 while 循环功能

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

对于下面的 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 语句始终更改值sortingCompleteFalse

当我们退出 for 循环时(当 number = my_list 数组的大小 - 1 时)我们到达了 while 循环的结尾,因为 for 循环中的 if 语句 sortingComplete 的值现在设置为 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/

相关文章:

按属性对对象 vector 进行排序的 C++ 模板

android - android中ListView的过滤和排序问题

c++ - std::stable_sort:如何选择内存优化算法而不是时间优化算法?

java - 制作一个智能监听器通知程序以避免到处重复代码

python - python2中的string.decode()函数

python - 我无法为 python 安装 'pip'

python-2.7 - 如何在 pyspark 中创建具有两个输入的 UDF

根据字母查找相似词的算法

algorithm - 将数组划分为尽可能多的连续部分

algorithm - 对强连通图的最小添加