在数组上对输入的数字进行排序 - Ruby - 不使用 'sort'

Sorting inputed numbers on array - Ruby - without using 'sort'

如果有人能帮助我,我将不胜感激。 我想在这个数组 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 

无论最佳解决方案是什么,您都会收到错误消息,因为您的第二个循环超出范围:您正在调用 x[j+1] 直到 x.length-1,这意味着当最后一个元素是 x[x.length - 1].

时,你最终调用了 x[x.length]

只需将 "for j in 0..x.length-1" 替换为 "for j in 0..x.length-2"

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

Ruby 范围的行为非常像数组,至少在循环时是这样。他们已经准备好了。

(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])