所以,我试图了解归并排序国税发算法的实现,但我不能让我的周围如何的过程中开始流向头,而它具有的阵列划分。下面的排序算法
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
)算法跳回阵列的另一侧,并那种。
在递归的某个时刻,某种(...)不会做任何事情,只是返回(因为升== r)和2排序(...)方法来完成。在这之后,合并进入行动,这确实没有什么比把2个元素以正确的顺序。在此之后发生的事情,从以前的调用一些其他类型的(...)方法完成等。