我有以下代码,泡泡对数组参数进行排序。
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
我想具体理解这一行:arr[i], arr[i + 1] = arr[i + 1], arr[i]
在这种情况下说arr[i] = 1 and arr[i+1] = 3
表达式将涵盖所有意图和目的1, 3 = 3, 1
显然,这会给我一个错误,所以我假设这只有在将值赋值给变量时才有用。
然而,对我来说,这似乎仍然是违反直觉的。我希望代码:arr[i], arr[i + 1] = arr[i + 1], arr[i]
给我一个错误。有没有人可以帮我解释为什么这是一个有效的表达?
答案 0 :(得分:0)
它所做的只是交换一个数组中的两个条目。
arr[i]
被设置为arr[i+1]
的当前值,同时arr[i+1]
被设置为arr[i]
的当前值。它被称为多重赋值或并行赋值。
所以举个例子:
在这种情况下说arr [i] = 1并且arr [i + 1] = 3
它正在同时执行arr[i] = 3
和arr[i+1] = 1
,因此数组中的值最终会被交换。
您可以在单独的语句中执行此操作,但您需要使用一些临时变量来保存其中一个值,否则数组中的两个值最终会相等。 e.g。
temp_value = arr[i]
arr[i] = arr[i+1]
arr[i+1] = temp_value
答案 1 :(得分:0)
查找if语句。为了交换两个值,应该满足if条件。在你的例子中,交换不会发生,因为(arr [i] = 1)> (arr [i + 1] = 3)是假的。在这种情况下,值将保持其位置。