我知道这是一个非常简单的问题,但我自己学习,所以请耐心等待我!
在维基百科的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
答案 0 :(得分:0)
该算法是递归的,这意味着该函数正在拆分列表,然后用每个部分调用自身。要终止递归,if (length == 1)
就足够了,因为分割的结果永远不会有空列表。你做对了。
但用户可以使用空列表调用此函数。所以这也需要抓住。因此if (length <= 1)
(if length of m ≤ 1 then return m
)。