【发布时间】:2016-06-23 14:55:42
【问题描述】:
在过去的几个月里,我一直在自学编程,我终于学会了递归。现在,我应该递归地实现Mergesort。我已经完成了我的研究并了解了应该发生的事情,但是我的代码存在一些问题。在这一点上,我不想只查找答案,因为我更感兴趣的是找出我做错了什么,而不仅仅是得到答案。我一直收到一个没有方法的错误说
[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])
【问题讨论】:
-
我猜错误指向
if arr_1[0] > arr_2[0]。尝试使用 gempry进行调试。在文档顶部require 'pry',然后在该行之前添加binding.pry并从终端运行。然后您就可以输入arr_1和arr_2来查看这些变量的值 -
请将代码格式化/对齐,缩进 2 个空格以使其可读。谢谢。
-
感谢您的回复。在 while 循环之前,我通过执行 p arr_1 和 p arr_1[0] 尝试了类似的操作,并且 6 作为 fixnum 而不是数组返回,但我也会尝试您的建议!