gpt4 book ai didi

ruby - 执行合并排序算法的系统堆栈错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:42 24 4
gpt4 key购买 nike

我正在使用递归进行合并排序算法,这可能是堆栈溢出的原因。我进行了搜索,但似乎无法找出代码的哪一部分导致了所有这些。

这是我的代码:

  def merge(arr)
return arr if arr.length <= 1
mid = arr.length/2
x = arr[0..mid]
y = arr[mid..-1]
merge_sort(merge(x),merge(y))
end

def merge_sort(left, right)
sorted = []
while left.length > 0 && right.length > 0
if left.first > right.first
sorted << left.shift
else
sorted << right.shift
end
end
sorted.concat(left).concat(right)
end


nums = 15.times.map {rand(100) + 1}
puts merge(nums)

在终端中我得到:merge-sort.rb:2: Stack level too deep (SystemStackError)

最佳答案

在 Ruby 中,... 是端点独占的,而 .. 是端点包含的。这意味着您的 xy 都包含 arr[mid]

改变

x = arr[0..mid]

x = arr[0...mid]    

它应该可以工作。

参见 http://www.ruby-doc.org/core-2.1.5/Range.html

关于ruby - 执行合并排序算法的系统堆栈错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com