【发布时间】:2023-01-28 06:26:42
【问题描述】:
// Sorts the sequence (A[p],...,A[r-1])
template<class T>
void merge_sort(array<T>& A,int p,int r)
{
if (p<r-1)
{
int q=?; // see discussion in the text
merge_sort(A,p,q);
merge_sort(A,q,r);
merge(A,p,q,r);
}
}
假设数组是 [4, 9, 13, 1, 5]。我理解递归,第一个 merge_sort 方法拆分数组直到[4] 点,所以第一个和第二个合并排序方法被跳过。它怎么知道数组的其余部分在哪里合并呢?数组 A 现在只有 [4],所以如果我们调用 merge (A,p,q,r) 它只会得到 4 而没有其他部分可以与之合并?
【问题讨论】:
-
“直到 [4] 点”是什么意思?通常 merge_sorts 将数组分成两半,并递归地对下半部分和上半部分进行排序,直到它到达长度为 1 的数组。