2015-10-16 117 views
1

我试图在ruby中实现泡沫排序。对于迭代,我使用each_index作为输入数组。我在最后一个索引处得到一个错误,因为i + 1索引元素是零,而ruby提供了与Fixnum相比较的例外。有没有办法解决它?不知何故,我可以在第二个元素处停止each_index吗?如何在ruby中运行each_index直到倒数第二个元素?

def bubble_sort(array) 
    flag = false 
    while flag == false 
     array.each_index do |i| 
      if array[i] > array[i+1] 
       array[i], array[i+1] = array[i+1], array[i] 
       flag = false 
      else 
       flag = true 
      end 
     end 
    end 
    puts array 
end 

bubble_sort([2,5,3,8,5,6,10]) 

回答

1

看看each_cons

def bubble_sort(array) 
    flag = false 
    while flag == false 
     array.each_index.each_cons(2) do |i,j| 
      if array[i] > array[j] 
      array[i], array[j] = array[j], array[i] 
      flag = false 
     else 
      flag = true 
     end 
     #etc 
相关问题