系统堆栈错误

时间:2014-03-19 05:56:35

标签: ruby

所以我在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。有人能告诉我为什么会这样吗?感谢。

2 个答案:

答案 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)