因此,我试图理解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
)时,算法会跳回到数组的另一端并对其进行排序。
答案 0 :(得分:0)
在递归的某个时刻,sort(...)不执行任何操作,仅返回(因为l == r),并且完成了2个sort(...)方法。此后,合并生效,除了将2个元素以正确的顺序放置外,它什么都不做。发生这种情况后,上一次调用中的其他sort(...)方法也将完成,依此类推。