问题:使用“until”循环中的第一行,我们将boolean(sorted)设置为true。为什么循环甚至在这一行之后运行?另外,为什么我们不能在.times do循环之后放置sorted = true(关闭直到排序的循环)并获得相同的结果?
def bubble_sort(arr)
len = arr.length
sorted = false
until sorted
sorted = true
(len-1).times do |i|
if arr[i] > arr[i+1]
arr[i],arr[i+1] = arr[i+1],arr[i]
sorted = false
end
end
end
arr
end
提前致谢!
答案 0 :(得分:4)
在循环的每次迭代开始时检查循环条件。循环体内sorted
的值无关紧要,重要的是当循环即将开始另一次迭代时sorted
的值。循环没有看sorted
看它的值何时改变,它只是在每次迭代之前评估sorted
并且在它真实时停止循环(即不是false
而不是{{1当它被检查时。