bubble对数组参数进行排序

时间:2014-05-03 11:21:34

标签: ruby arrays bubble-sort

我有以下代码,泡泡对数组参数进行排序。

   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]给我一个错误。有没有人可以帮我解释为什么这是一个有效的表达?

2 个答案:

答案 0 :(得分:0)

它所做的只是交换一个数组中的两个条目。

arr[i]被设置为arr[i+1]的当前值,同时arr[i+1]被设置为arr[i]的当前值。它被称为多重赋值或并行赋值。

所以举个例子:

  

在这种情况下说arr [i] = 1并且arr [i + 1] = 3

它正在同时执行arr[i] = 3arr[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)是假的。在这种情况下,值将保持其位置。