我的冒泡排序代码中的错误在哪里?

时间:2014-05-23 13:22:50

标签: ruby bubble-sort

我看到有更好的红宝石气泡排序代码已经发布在这里的地方: Using the Bubble sort method for an array in Ruby 但是我在调​​试当前代码时遇到问题,并希望找到一些帮助,找出我的代码无效的原因。感谢。

def bubble_sort(arr)
    original = arr
    x = 0
    while x < arr.count - 1
        if arr[x] < arr[x + 1]
            y = arr[x + 1]
            arr[x + 1] = arr[x]
            arr[x] = y
        end
        x += 1
    end
    if original == arr
        return arr
    else
        return bubble_sort(arr)
    end 
end

2 个答案:

答案 0 :(得分:3)

其中一个问题是:

original = arr

您希望original获得当前状态的arr副本,对吗?好吧,不。它们将指向同一个数组。这就是为什么你的功能永远不会在这里递归的原因:

if original == arr
    return arr
else
    return bubble_sort[arr]
end 

要复制数组,请使用dup

original = arr.dup

答案 1 :(得分:2)

四个问题:

  1. bubble_sort[arr]不起作用 - 您应该致电bubble_sort(arr)
  2. original == arr - 将永远为真,因为您之前已将其分配到arr - 您应该使用dup - original = arr.dup
  3. 进行分配
  4. arr[x] < arr [x+1]将创建一个按相反顺序排序的数组...
  5. 您应该更改本地副本而不是您获得的副本 - result = arr.dup而不是original = arr.dup
  6. 以上修正后的代码:

    def bubble_sort(arr)
      result = arr.dup
      x = 0
      while x < result.count - 1
        if result[x] > result[x + 1]
          y = result[x + 1]
          result[x + 1] = result[x]
          result[x] = y
        end
        x += 1
      end
      if arr == result
        return result
      else
        return bubble_sort(result)
      end 
    end
    
    bubble_sort([1,3,5,2,4])
    # => [1, 2, 3, 4, 5]