我没有留下任何机会,只能在这里注册,寻求澄清我正在努力理解的一个问题。 我是一个接近零编码体验的虚拟人,并且正在学习AppleScript以及我正在阅读的教科书(H.Rosenthal,H.Sanderson。Mac OSX.2010上的脚本和自动化综合指南,第3版)我偶然发现根据Bubble排序的简要概述。有问题的例子是:不知道布尔人在臭名昭着的气泡排序中的用法
on bubblesort(the_list)
set is_sorted to false
repeat until is_sorted
set is_sorted to true
repeat with i from 1 to (count the_list)
if item i of the_list > item (i + 1) of the_list then
set {item i of the_list, item (i + 1) of the_list} to {item (i + 1) of the_list, item i of the_list}
set is_sorted to false
end if
end repeat
end repeat
end bubblesort
我明白冒泡排序的要领,我知道循环是如何工作的,以及当一个人应该使用“重复”的语句。我无法理解的是布尔的使用,我没有找到关于在这个算法中使用布尔值的问题以及这两个环路如何相互影响的解释。这里是我的逻辑,请大家指正我缺少其中:
- 由于排序,我们要应用到给定列表的类型是一个循环的过程,我们将利用2种重复循环:“重复与......从...到...“循环遍历the_list的每个条目,并”重复直到“执行尽可能多的过程所需的过程。
- “重复直到”将是一个外部循环,而“重复...从...到...”将嵌套在前者中。
- 外循环的布尔表达式将是一个新创建的变量is_sorted的值,正如它的类所暗示的那样,它将存储一个变化的值。由于必须定义任何变量,因此我们将其设置为循环外的“false”。
当
item i of the_list > item (i + 1)
时,内循环的条件语句“if”假设为“true”。如果满足这个条件,则is_sorted获取“false”(就像它已经设置)。最终当列表中的所有项目(the_list)被排序时,这个条件将变为“true”,因此将是is_sorted的值。我对吗?所以这里的问题出现了:列表项
- 有什么动作的确切顺序?
- 内部循环中的动作是首先执行还是从上到下两个循环中的所有动作都是?
- 当is_sorted获取“false”值后,此变量的输出指向哪里?
- 当内循环的
is_sorted
变量为“false”时,动作“跳动”重复,直到is_sorted
设置为“false”? - 内循环中的is_sorted如何与外循环的
is_sorted
对话?为什么立即将is_sorted
的值改为“true”后立即声明为“false”? is_sorted
在内循环响应内循环结果之前如何设置为true?
这是很难制定这些问题,所以如果我给我的反应将不胜感激。我肯定我跳过了一些我只是忘记了的问题,但幸运的是,稍后会恢复。
Visualisation of my understanding of bubble sort
请将您的问题简化为简短易懂的内容 –
我刚刚参加了此讨论区的讨论,因此我正试图进入整个格式化问题,这里的内容相当复杂。 – scrutinizer1