【发布时间】:2011-11-08 22:10:39
【问题描述】:
所以我试图在 ruby 中实现快速排序,但我收到了这个错误 `quicksort': stack level too deep (SystemStackError)
def quicksort(array)
if array.length <= 1
return array
end
less = Array.new
greater = Array.new
pivot = array[array.length/2]
array.each do |x|
if x < pivot
less << x
else
greater << x
end
end
return quicksort(less) << pivot << quicksort(greater)
end
编辑
我将else 更改为elsif x > pivot,它似乎可以工作。
【问题讨论】:
-
快速排序最多可以使用 n 层堆栈(在病态的情况下),其中 n 是输入元素的数量。如果达到这种情况,那么只需增加堆栈大小、选择更好的枢轴方法(这只会减少病态的坏情况)或更改快速排序实现即可修复它。如果它发生在一个小的 n 上,那么终端条件当然是错误的 :) 导致这个异常的 [smallest] 输入是什么?
-
在什么情况下会出现此错误?
-
我改变了 else => elsif x > pivot 并且它似乎工作了。