【问题标题】:bubble sorts array parameter冒泡排序数组参数
【发布时间】:2014-06-20 01:25:53
【问题描述】:

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

   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

显然这会给我一个错误,所以我假设这仅在将 value 分配给变量时才有效。

但是,这对我来说似乎仍然违反直觉。我希望代码:arr[i], arr[i + 1] = arr[i + 1], arr[i] 给我一个错误。有没有人可以帮助我解释为什么这是一个有效的表达方式?

【问题讨论】:

    标签: ruby arrays bubble-sort


    【解决方案1】:

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

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

    举个例子:

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

    它同时执行arr[i] = 3arr[i+1] = 1,因此数组中的值最终交换了。

    您可以在单独的语句中执行此操作,但您需要使用一些临时变量来保存其中一个值,否则数组中的两个值最终会相等。例如

    temp_value = arr[i]
    arr[i]     = arr[i+1]
    arr[i+1]   = temp_value
    

    【讨论】:

      【解决方案2】:

      寻找 if 语句。为了交换两个值,应该满足 if 条件。在您的示例中,交换不会发生,因为 (arr[i] = 1) > (arr[i + 1] = 3) 为假。在这种情况下,这些值将保持其位置。

      【讨论】:

        猜你喜欢
        • 2013-09-28
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多