合并排序递归

时间:2013-04-24 13:41:02

标签: merge mergesort

我有问题。我开始学习合并排序是如何工作的,现在我被卡住了。 我不明白合并函数中的第二次递归。

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个元素数组)? 我希望你能明白我的意思。感谢。

1 个答案:

答案 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