【问题标题】:Merge sort infinite recursion归并排序无限递归
【发布时间】:2016-04-14 16:31:28
【问题描述】:

我还没有开始合并过程。到目前为止,我只专注于一遍又一遍地划分数组,直到数组中只剩下 1 个数字。下面是我的代码,展示了到目前为止我是如何实现的。

def mergesort(list)
  mid = list.length / 2
  left = list[0, mid]
  right = list[mid, list.size]
  until left.size <= 1 || right.size <= 1 do
    test(mergesort(left), mergesort(right))
  end
  print left
  print right
  def test(left, right)
    sorted = []
    left.length / 2
    right.length / 2
    # print sorted
  end
end

我的问题是循环不会中断。我希望有人能指出我正确的方向。我也愿意提供资源来帮助我更好地解决这个问题。我想要一些指导来解决这个已经出现的问题。

【问题讨论】:

  • 为什么循环会中断?

标签: ruby algorithm mergesort


【解决方案1】:

您的循环是无限的。 leftright没有在稍后的更深步骤中更改,因此它们都保持大于 1。

until left.size <= 1 || right.size <= 1 do
    test(mergesort(left), mergesort(right))
end

如何解决这个问题

merge-sort 使用的概念之一是recursion

那些排序算法使用stack,因为它应该适用于任何大小。你应该在你的递归方法中实现你的end condition。例如:

def mergesort(list)
  return list if array.size <= 1 # end condition
  mid = list.length / 2
  left = mergesort list[0, mid]
  right = mergesort list[mid, list.size]    

  print left
  print right

  # TODO merge left and right
end

如您所见,我们首先递归地对前半部分进行归并排序,直到数组的大小小于或等于 1。然后是右边部分。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2015-06-17
    • 2010-12-08
    • 1970-01-01
    • 2015-01-21
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多