运行Ruby冒泡排序

时间:2016-05-11 12:44:27

标签: arrays ruby bubble-sort

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

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 个答案:

答案 0 :(得分:4)

如何在外部循环中添加变量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])