【问题标题】:Ruby bubble sort not sorting all elementsRuby冒泡排序不排序所有元素
【发布时间】:2016-12-18 21:49:59
【问题描述】:

尝试实现一个简单的冒泡排序。代码如下:

def bubble(array)
  start = 0
  sorted = []
  while start < array.length - 1
    if array[start] > array[start + 1]
      array[start], array[start + 1] = array[start + 1], array[start] 
    else
    end
  start += 1
  end
  return array
end

print bubble([4,8,2,6,7,1])

我得到的输出是:

[4, 2, 6, 7, 1, 8]

我的代码哪里出了问题?

【问题讨论】:

  • 您的start 计数器需要以某种方式重置,以便您可以继续进行比较。现在你的while 循环只遍历所有数字一次
  • else end 是多余的,仅供参考; @philipyoo 是正确的,您需要反复遍历数组,直到不再进行交换为止

标签: arrays ruby sorting while-loop


【解决方案1】:

首先,如果你打算使用sorted,你应该避免修改array,而是使用一个副本。您需要反复遍历数组,直到不再有项目出现故障,例如:

def bubble(array)
  sorted = array.dup
  finished = false
  until finished
    start = 0
    finished = true
    while start < sorted.length - 1
      if sorted[start] > sorted[start + 1]
        sorted[start], sorted[start + 1] = sorted[start + 1], sorted[start]
        finished = false
      end
      start += 1
    end
  end
  return sorted
end

虽然我会特别提到明确的return 在Ruby 中相对不受欢迎;您可以简单地将sorted 作为语义相同的最后一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2016-09-06
    • 2021-12-15
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多