Fixnum与nil的比较失败(ArgumentError)

时间:2017-04-22 22:50:22

标签: ruby

我从红宝石开始,我不知道为什么会这样。 这是我的代码。

def buble_sort(a)
    i = 0
    print a.size()
    while i < a.size() do
        if a[i] > a[i+1] then
            temp = a[i]
            a[i] = temp
            a[i+1] = a[i]
        end
        i = i + 1 
    end
    return a
end

puts "Amount of elements in your array"
n = gets.chomp.to_i
a = []
n.times do |num|
    puts "input your element #{num}"
    a <<gets.chomp.to_i
end
puts a
a = buble_sort(a)
puts "Array sorted #{a}"

输出给我这个错误: 4burbuja.rb:6:>': comparison of Fixnum with nil failed (ArgumentError) from burbuja.rb:6:in buble_sort'         来自burbuja.rb:24:在''

1 个答案:

答案 0 :(得分:-1)

我知道您正在学习ruby并想要实现自己的冒泡排序。 a.sort很容易,但不教你任何东西。我很高兴你在学习!冒泡排序方法存在缺陷。您正在递增i并在每次迭代时将其用作数组的索引。可能需要多次迭代才能完成,在最坏的情况下,它将需要n ** 2(n平方)迭代,这显然将超过数组中的元素。但是,如果您的代码按预期运行,我希望您运行它只会在数组上进行一次传递。

这是一种经典的红宝石泡泡排序。 (让你的用户从控制台填充数组) 请注意,我们会多次继续处理ENTIRE数组,直到我们不再需要交换任何值。

def bubble_sort(array)
  n = array.length
  puts "Sorting your array of #{n} items"
  loop do     #will loop forever till we break
              #When we go through the entire array
              #and don't have to swap then the array
              #is sorted
    swapped = false

    (n-1).times do |i|
      print "*"  #just to illustrate how many iterations occur
      if array[i] > array[i+1]
        array[i], array[i+1] = array[i+1], array[i] #swap these values, no pesky temp variable
        swapped = true
      end
    end

    break if not swapped   #we are done exit the loop
  end

  array  #return the sorted array
end

puts "Amount of elements in your array"
n = gets.chomp.to_i
a = []
n.times do |num|
    puts "input your element #{num}"
    a <<gets.chomp.to_i
end
puts a
a = bubble_sort(a)
puts "Array sorted #{a}"

以下是通过控制台

运行的示例
Cyclops% ruby sort_test.rb
Amount of elements in your array
6
input your element 0
5465463
input your element 1
3421
input your element 2
432143
input your element 3
234123
input your element 4
645
input your element 5
1
5465463
3421
432143
234123
645
1
Sorting your array of 6 items
******************************
Array sorted [1, 645, 3421, 234123, 432143, 5465463]
Cyclops%