Ich habe mich in den letzten Monaten selbst programmieren Programmierung und ich bin endlich auf Rekursion. Im Moment soll ich rekursiv Mergesort
implementieren. Ich habe recherchiert und verstanden, was passieren soll, aber ich habe einige Probleme mit meinem Code. An dieser Stelle möchte ich nicht nur die Antwort nachschlagen, weil ich mehr daran interessiert bin herauszufinden, was ich falsch mache, als nur die Antwort zu haben. Ich halte einen Fehler keine Methode bekommenImplementieren von Mergesort in Ruby rekursiv
nicht definierte Methode `sagen>‘ für [6]: Array
Mein Code im Moment so ist:
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])
Ich vermute, der Fehler zeigt auf 'wenn arr_1 [0]> arr_2 [0]'. Versuchen Sie es mit dem Juwel 'hebeln 'zu debuggen. Am Anfang des Dokuments "require" pry', dann direkt vor dieser Zeile "binding.pry" hinzufügen und vom Terminal laufen. Sie können dann 'arr_1' und' arr_2' eingeben, um die Werte dieser Variablen zu sehen. –
Formatieren Sie den Code mit 2-Punkt-Einrückungen, um ihn lesbar zu machen. Vielen Dank. – mudasobwa
Danke für Ihre Antwort. Ich hatte etwas Ähnliches versucht, indem ich p arr_1 sowie p arr_1 [0] vor der while-Schleife und 6 als Fixnum und nicht als Array zurücklegte, aber ich werde versuchen, was Sie auch vorgeschlagen haben! –