在网上阅读了什么是泡沫排序后,我觉得我理解得很好,但是有人给我的解决方案并不完全直观。
以下是创建使用气泡排序方法对数组进行排序的方法的解决方案:
def bubble_sort(arr)
sorted = false
until sorted
sorted = true
(arr.count - 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
我有点难以理解术语"排序"在这里做什么。我知道有一个 .sort 方法,但我找不到任何排序方法,也不完全清楚循环如何知道如何结束。
有人可以解释一下"排序"一词发生了什么吗?
sorted
是一个布尔变量,用于指示排序是否完整。
最初,sorted
设置为 false(假设数组尚未排序)。 主(外部)循环上的进入条件检查sorted
是真还是假,如您所见,循环一直持续到sorted
为真。
每次通过外部循环时,sorted
都会开始设置为 true。 但是,内部循环会检查数组中是否有任何值不符合正确的顺序,如果不是,则交换它们,并将sorted
设置为 false。
仅当内部循环遍历整个数组而不需要交换任何值时,sorted
才会保持 true 并且外部循环退出。
它不是一个方法,它是一个局部变量。特别是,这些类型的变量称为标志。它在相对较少的替代值之间切换,以保持算法的内部状态。在这种情况下,它在false
和true
之间切换,并用于控制是否从until
循环中转义。