2015-10-19 57 views
2

如果有人可以帮助我,我真的很感激它。 我想在这个数组上输入数字x [0,100] 然后,打印整个数组,但是里面的数字从最小到最大排序,而不使用排序数组。在数组中排序输入的数字 - 红宝石 - 不使用'排序'

到目前为止我有这个代码,但是我在做比较时遇到了一个错误。有人可以帮助我吗?

x = [0,100] 
print x 

puts "\nInput any number from 0~100" 
num = gets.to_i 
x.push(num) 

for i in 0..x.length-1 
    for j in 0..x.length-1 
     if x[j] < x[j+1] 
      swap = x[j] 
      x[j] = x[j+1] 
      x[j+1] = swap 
     end 
    end 
end 
p x 
+0

有什么好的理由,你不想使用标准的API? '不使用排序数组' –

+0

我的教授不希望我们使用排序。我认为这是因为他希望我们想办法绕过 – bisuke

+2

你可以像这样换一行:'x [j],x [j + 1] = x [j + 1],x [j]' – steenslag

回答

5

不管什么是最好的解决办法是,你会得到一个错误,因为你的第二个循环是走出去的束缚:你打电话X [j + 1]高达x.length-1,这意味着当最后一个元素是x [x.length - 1]时,最终调用x [x.length]。

只需替换为 “对于j在0..x.length-1”, “在0..x.length-2 J”

x = [0,100] 
print x 

puts "\nInput any number from 0~100" 
num = gets.to_i 
x.push(num) 

for i in 0..x.length-1 
    for j in 0..x.length-2 
     if x[j] < x[j+1] 
      swap = x[j] 
      x[j] = x[j+1] 
      x[j+1] = swap 
     end 
    end 
end 
p x 
+0

哇!非常感谢你我真的很感激! – bisuke

+0

哦,是的,我仍然是一个noobie。再次感谢! – bisuke

+0

为什么你在这个脚本的开头做'x = [0,100]'和'x = [1,49,20,30,58,10,48,9]'?另外,通常使用'each'而不是'for'循环来使用''''''''更多的Ruby-esque :) – DaniG2k

0

红宝石范围表现非常像阵列,至少循环时。他们已经准备就绪。

(1..100).each { |num| puts num } 

你的代码看起来像是看下一个元素是否更高,然后刷卡。但是数组中的更多元素呢?这是递归的方式

def my_sort(list, new_array = nil) 

    return new_array if list.size <= 0 
    if new_array == nil 
    new_array = [] 
    end 
    min = list.min 
    new_array << min 
    list.delete(min) 

    my_sort(list, new_array) 

end 

puts my_sort([3, 1, 2, 20, 11, 14, 3, 6, 8, 5])