【问题标题】:Sorting inputed numbers on array - Ruby - without using 'sort'对数组上的输入数字进行排序 - Ruby - 不使用“排序”
【发布时间】:2015-10-19 09:10:46
【问题描述】:

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

【问题讨论】:

  • 您有什么理由不想使用标准 API 吗? WITHOUT using sort array
  • 我的教授不希望我们使用排序。我认为这是因为他希望我们思考自己的方式
  • 你可以像这样交换一行:` x[j], x[j+1] = x[j+1], x[j]`

标签: arrays ruby sorting numbers comparison


【解决方案1】:

无论最佳解决方案是什么,您都会收到一个错误,因为您的第二个循环超出范围:您将 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

【讨论】:

  • 你为什么在这个脚本的开头写x = [0,100]x = [1,49,20,30,58,10,48,9]?此外,使用each 而不是for 循环通常更符合Ruby 风格:)
  • @DaniG2k 因为那是 OP 写的 ;) 我只是复制/粘贴了 OP 的代码并进行了更正,你应该问他/她
  • 哎呀,评论是给@basukesu的,不是给你的:P
  • 哎呀!对不起。在发布我的代码之前,我正在尝试不同的东西,但我忘了删除那个无用的数组!感谢您注意到@DaniG2k 我刚刚删除了它,但处理我的编辑需要一些时间:/
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2021-06-10
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多