2015-10-19 7 views
2

Я был бы очень признателен, если кто-то может мне помочь в этом. Я хочу ввести числа на этом массиве x [0,100] Затем напечатайте весь массив, но с номерами внутри, отсортированными от наименьшего до большого без использования массива сортировки.Сортировка введенных чисел по массиву - Ruby - без использования 'sort'

У меня есть этот код до сих пор, но я получаю сообщение об ошибке, где я делаю сравнение. Может ли кто-нибудь помочь мне в этом, пожалуйста?

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

Независимо от того, что лучшим решением будет, вы получите сообщение об ошибке, потому что ваш второй цикл выходит из межи: вы вызываете х [J + 1] до x.length-1, что означает, что в конечном итоге вы вызываете x [x.length], когда последний элемент x [x.length - 1].

Просто замените "для J в 0..x.length-1" с "для дж 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 
+0

wow ! Большое спасибо, я очень ценю это! – bisuke

+0

О, да, я все еще нобе. еще раз спасибо! – bisuke

+0

Почему вы выполняете 'x = [0,100]' и 'x = [1,49,20,30,58,10,48,9]' в начале этого скрипта? Кроме того, обычно Ruby-esque использует 'each' вместо' for' loops :) – 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]) 
Смежные вопросы