为什么我们需要对以下代码的真值和假值进行排序?
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
答案 0 :(得分:2)
当没有交换的传递时,冒泡排序终止。此代码通过假定列表已排序来启动传递:
sorted = true
但是,如果进行了交换,则确定列表之后没有排序:
if arr[i] > arr[i + 1]
arr[i], arr[i + 1] = arr[i + 1], arr[i]
sorted = false
end
在某种程度上,这个变量的名称是一个谎言,只是片刻:在倒数第二次传递之后,进行任何交换的最后一次传递,"排序"即使数组已完全排序,也为false。最后一个遍历,即遍历排序数组的那个,然后将设置" sorted"为真。