Я преподавал программирование в течение последних нескольких месяцев, и я, наконец, до рекурсии. Прямо сейчас, я должен реализовать рекурсивно Mergesort
. Я сделал свое исследование и понял, что должно произойти, но у меня возникают некоторые проблемы с моим кодом. На данный момент я не хочу просто искать ответ, потому что мне больше интересно выяснить, что я делаю неправильно, а не просто получить ответ. Я получаю сообщение об ошибке не метод, говорящийВнедрение Mergesort в Ruby Рекурсивно
неопределенный метод `>» для [6]: Array
Мой код в данный момент, например:
def merge_sort(arr)
n = arr.length
p = n/2
q = p - 1
return arr if n == 1
l1 = arr[0..q]
l2 = arr[p..n]
l1 = merge_sort(l1)
l2 = merge_sort(l2)
return merge(l1, l2)
end
def merge(arr_1, arr_2)
arr_3 = []
while !arr_1.empty? && !arr_2.empty?
if arr_1[0] > arr_2[0]
arr_3 << arr_2[0]
arr_2.delete_at(0)
else
arr_3 << arr_1[0]
arr_1.delete_at(0)
end
end
if arr_1.length == 0
arr_3 << arr_2[0..-1]
elsif arr_2.length == 0
arr_3 << arr_1[0..-1]
end
arr_3
end
puts merge_sort([2, 6, 4, 5, 7, 9, 8, 3])
Я предполагаю, что ошибка указывает на 'если arr_1 [0]> arr_2 [0]'. Попробуйте использовать gem 'pry' для отладки. В верхней части документа 'require 'pry'', а затем перед этой строкой добавьте' binding.pry' и запустите с терминала. Затем вы сможете напечатать 'arr_1' и' arr_2', чтобы увидеть значения этих переменных. –
Пожалуйста, отформатируйте/выровняйте код с отступом 2-пространства, чтобы сделать его доступным для чтения. Благодарю. – mudasobwa
Спасибо за ваш ответ. Я пробовал что-то подобное, выполняя p arr_1, а также p arr_1 [0] до цикла while, а 6 возвращался как fixnum, а не массив, но я попробую то, что вы предложили! –