合并排序过程

时间:2019-02-03 22:15:00

标签: java sorting recursion mergesort

因此,我试图理解mergeSort算法的实现,但是当它必须划分数组时,我无法理解流程在开始时的流程。下面的排序算法

void sort(int arr[], int l, int r) 
{ 
    if (l < r) 
    { 
        // Find the middle point 
        int m = (l+r)/2; 

        // Sort first and second halves 
        sort(arr, l, m);          //talking about 
        sort(arr , m+1, r);       //this part 

        // Merge the sorted halves 
        merge(arr, l, m, r); 
    } 

我想到的唯一一个分支数组的模型是这个(考虑数组{48,34,4,1}):

m(a, l(0), r(3));
  m(a, l(0), m(1));
    m(a, l(0), m(0));
    m(a, m+1(1), r(1));
  m(a, m+1(2), r(3));
    m(a, l(2), m(2));
    m(a, m+1(3), r(3);

这是进行呼叫的顺序吗?       通话:

    sort(arr, l, m);      
    sort(arr , m+1, r);

我也不明白为什么当方法参数不满足if条件(l<r)时,算法会跳回到数组的另一端并对其进行排序。

1 个答案:

答案 0 :(得分:0)

在递归的某个时刻,sort(...)不执行任何操作,仅返回(因为l == r),并且完成了2个sort(...)方法。此后,合并生效,除了将2个元素以正确的顺序放置外,它什么都不做。发生这种情况后,上一次调用中的其他sort(...)方法也将完成,依此类推。