我有问题。我开始学习合并排序是如何工作的,现在我被卡住了。 我不明白合并函数中的第二次递归。
int merge_sort(int input[], int p, int r)
{
if ( p >= r ) return 0;
int mid = floor((p + r) / 2);
merge_sort(input, p, mid);
**merge_sort(input, mid + 1, r);**
merge(input, p, r);
}
当第一次递归完成后,我最终会得到这样的结果: 原始阵列:3 4 5 6 7 8
3 4 5 | 6 7 8
3 4 | 5
3 | 4
3
然后第二次递归开始。 所以,我的问题是:第二次递归是从数组开始的,只有一个元素(只有一个数字的数组,在本例中为3)或原始数组(从头开始的6个元素数组)? 我希望你能明白我的意思。感谢。
答案 0 :(得分:0)
我无法从您的代码中分辨出来,因为您总是传递输入数组。但是,是的,想法是划分和征服所以第一次调用应该是
merge_sort:3 4 5 6 7 8
第一次递归:3 4 5
第二次递归:6 7 8
查看此维基百科图片:http://en.wikipedia.org/wiki/File:Merge_sort_algorithm_diagram.svg