我从红宝石开始,我不知道为什么会这样。 这是我的代码。
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:在''
答案 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%