所以我在Ruby中使用以下代码进行合并排序。
class MergeSort
def sort(array)
if array.length == 1 || array.length == 0
return array
end
firstHalf = array[0..array.length / 2]
secondHalf = array[(array.length / 2) + 1..array.length]
firstHalf = sort(firstHalf)
secondHalf = sort(secondHalf)
b = 0
c = 0
for i in (0..(firstHalf.length - 1))
while b < secondHalf.length && firstHalf[i] >= secondHalf[b]
array[c] = secondHalf[b]
b = b + 1
c = c + 1
array[c] = firstHalf[i]
c = c + 1
end
return array
end
end
array = [1,4,9,14,20,25]
puts MergeSort::new.sort(array)
当我运行代码时,我得到一个SystemStackError
。有人能告诉我为什么会这样吗?感谢。
答案 0 :(得分:1)
猜测一下,一旦数组长度变为3(即元素[0..2]
),则调用
firstHalf = array[0..array.length / 2]
评估为
0..1.5
如果1.5被四舍五入为2
然后再次调用排序[0..2]
最终会出现堆栈溢出?
答案 1 :(得分:0)
要拨打.new
,您必须在班级中使用initialize
方法。
您可能想要做的是在类本身上调用.sort
,在这种情况下,您必须在其前面添加self
,所以:
class MergeSort
def self.sort(array)
...
之后你可以这样称呼它:
MergeSort.sort(array)