运行 Ruby 冒泡排序

Posted

技术标签:

【中文标题】运行 Ruby 冒泡排序【英文标题】:Running Through a Ruby Bubble Sort 【发布时间】:2016-09-06 21:10:03 【问题描述】:

我正在编写一个冒泡排序代码,作为 Ruby 初学者课程的一部分。我知道(array.length - 1).times do |i| 是不好的做法,因为我不需要每次都跑到数组的末尾。 (在我的例子中,[5,4,3,2,1] 5 在第一次运行时被移动到最后,第四次在第二次结束时位于正确的位置,等等,所以没有必要再次检查这些数字):

def bubble_sort(array)
  (array.length - 1).times do
    (array.length - 1).times do |i|
      array[i], array[i+1] = array[i+1], array[i] if array[i] > array[i+1]
    end 
  end
end

bubble_sort([5,4,3,2,1])

有没有一种巧妙的方法来告诉方法每次检查数组中的一个元素?

【问题讨论】:

【参考方案1】:

在外循环中添加变量j 并从array.length - 1 中减去 j 怎么样?

看起来像这样:

def bubble_sort(array)
  (array.length - 1).times do |j|
    (array.length - 1 - j).times do |i|
      array[i], array[i+1] = array[i+1], array[i] if array[i] > array[i+1]
    end 
  end
end

bubble_sort([5,4,3,2,1])

【讨论】:

效果很好(我没有意识到我可以这样使用 i 和 j 的数值)。感谢您的帮助! 事实上,您的算法只返回 4,而不是原始数组排序。您需要在方法结束时返回数组。

以上是关于运行 Ruby 冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Ruby 中使用带有任何方法的 while 循环来执行冒泡排序算法?

C语言冒泡排序。

冒泡排序

改进冒泡排序的运行时间分析

用Go实现冒泡排序选择排序和快速排序的运行效率比较

动画冒泡排序