【问题标题】:Why does the code incorrectly sort the two arrays?为什么代码错误地对两个数组进行排序?
【发布时间】:2017-05-16 04:14:34
【问题描述】:

这是我尝试解决问题的更新 为什么它对数组进行反向排序?逻辑对我来说很有意义。

def combine_array(arr1,arr2)
arr3 = []
arr1.each do |x|
    arr3.push(x)
end

arr2.each do |x|
    arr3.push(x)
end

arr3.each_index do |i|
    arr3.each_index do |j|
      if arr3[i] > arr3[j]
        hold = arr3[i]
        hold2 = arr3[j]
        arr3[i] = hold2
        arr3[j] = hold
      end
end
end
return arr3

结束

combine_array([1,5,3],[6,2,4])

Click link to see the code and the array in reverse order

【问题讨论】:

  • 我认为你不想只做(arr1 + arr2).sort是有原因的?
  • 对不起,我忘了提。你的假设是正确的。
  • 我们应该帮助您使用原始代码还是更新的代码?我会说选择一个并坚持下去。如果您有解决方案,您可以将其发布为答案。然而,改变问题令人困惑。
  • @Stefan 很抱歉造成混乱。我把这个问题浓缩给我,让我不那么困惑
  • @TarekulIslam 您是否尝试实现特定的排序算法?

标签: arrays ruby sorting for-loop


【解决方案1】:
  1. 您迭代了arr3[i+1..-1].each_index do |j|,然后引用了arr3[j],但这是arr3 的正面部分,您可能并不打算这样做。 jarr3[i+1..-1] 中的索引,而不是 arr3

  2. 您只经过一次arr3,并非所有数组都可以通过您的算法中的一次遍历进行排序。

【讨论】:

  • 我不同意我多次通过 arr3。如果您注意到它们是 for 循环中的 for 循环。对于 arr3 中的每个索引,我都会遍历 arr3 的其余部分。例如:在数组 [1,5,3,6,2,4] 中,我比较索引 0 中的值,即 1 到 1,5,3,6,2,4,而不是比较索引 1 到 5 中的值,3,6,2,4。因为 5 大于 3,所以我切换数字。然后我继续将索引 1 中的值与 6、2、4 进行比较,直到该索引中的值完全排序。
【解决方案2】:

这就是解决办法

def combine_array(arr1,arr2)
arr3 = []
arr1.each do |x|
    arr3.push(x)
end

arr2.each do |x|
    arr3.push(x)
end

arr3.each_index do |i|
    j = i+1
    until j == arr3.length  do
        if arr3[i] > arr3[j]
            hold = arr3[i]
            hold2 = arr3[j]
            arr3[i] = hold2
            arr3[j] = hold
        end
        j+=1
    end
end
return arr3

结束

combine_array([1,5,3],[6,2,4])

【讨论】:

    【解决方案3】:

    如果您不想使用 .sort 方法,这里有另一种可能感兴趣的方法: Sorting an Array in Ruby without using Sort method

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 2015-12-27
      • 2016-03-12
      • 1970-01-01
      • 2015-11-30
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多