mergeSort需要基本案例的澄清

时间:2016-04-03 17:47:01

标签: mergesort

我知道这是一个非常简单的问题,但我自己学习,所以请耐心等待我!

在维基百科的mergeSort的伪代码中(见下文),终端案例是数组/列表的长度是否小于或等于1。在评论中,他们说如果它的长度为0或1,那么它就是排序的。我同意这一点,但我很好奇这是否意味着如果代码function merge_sort(list m) // Base case. A list of zero or one elements is sorted, by definition. if length of m ≤ 1 then return m // Recursive case. First, divide the list into equal-sized sublists // consisting of the even and odd-indexed elements. var left := empty list var right := empty list for each x with index i in m do if i is odd then add x to left else add x to right // Recursively sort both sublists. left := merge_sort(left) right := merge_sort(right) // Then merge the now-sorted sublists. return merge(left, right) ,mergeSort将无法运行?我只是混淆了数组如何分裂成0长度的数组。如果它的长度等于1,它是否会停止?

ValidateScript

1 个答案:

答案 0 :(得分:0)

该算法是递归的,这意味着该函数正在拆分列表,然后用每个部分调用自身。要终止递归,if (length == 1)就足够了,因为分割的结果永远不会有空列表。你做对了。

用户可以使用空列表调用此函数。所以这也需要抓住。因此if (length <= 1)if length of m ≤ 1 then return m)。