机制

2017-02-27 22 views
0

1归并函数被调用,直到如果条件满足 现在,据我所知,如果IF-conditon不满足,则它的身体就不会执行机制

余米无法理解后if-conditon第2个mergesort函数的不满意度是否会被调用?它是如何发生的? PLZ详细讲解

mergesort (int*a,int*b,int low,int high) 

{ 

    int pivot 
    if(low<high) 
     { 
       pivot=(low+high)/2; 
       mergesort(a,b,low,pivot);/*1st*/ 
       mergesort(a,b,pivot+1,high);/*2nd*/ 
       merge(a,b,low,pivot,high); 
     } 
    return ; 
} 
+0

这个问题没有意义了我。 –

+0

@AlKepp你不明白什么 –

+0

@Ankush你意识到'mergesort'是一个函数,对吧?问:函数返回时会发生什么? - 答:你继续下一个评估,在这种情况下,下一行... – pjs

回答

0

我的问题是,为什么归并(A,B,枢+ 1,高)被称为?

mergesort(a,b,pivot + 1,high)被调用是因为前面的语句mergesort(a,b,low,pivot)只对数组的下半部分和上半部分进行排序仍然需要在顺序排序为合并(A,b,低,枢轴,高)是有效的(如果未然后排序的阵列的部分。

例如。

比方说你有一个大小为5的阵列{e,d,c,b,a}

最初mergesort(a,b,low,pivot)只能从低点排列到枢轴点(包括数据透视),而mergesort(a,b,pivot + 1,high)则从(不包括数据透视图)到最高点。

在我提供的情况下,这意味着第一次mergesort被调用的枢纽将是c。这意味着{e,b,c}将被第一个mergesort排序,而{b,a}将被第二个mergesort排序。

欲了解更多信息,请参阅本answer

0

要跟进Rohlex32的答案(他的回答应该得到正确答案的功劳)。

我的问题是为什么mergesort(a,b,pivot + 1,high)被调用?

作为回答Rohlex32,这是因为归并(A,B,低,高),采用高作为最后索引进行排序,所以归并(A,B,低,枢轴),包括在所述元件[枢]。

mergesort的替代实现使用开始和结束索引,其中结束索引比最后一个索引大1。要归并最初的通话将

mergesort(a, b, 0, sizeof(a)/sizeof(a[0])); 

这样一个合并功能将是一个有点不同于上面:

void mergesort(int *a, int *b, int begin, int end) 
{ 
    int mid = (begin+end)/2; 
    if((end - begin) < 2) 
     return; 
    mergesort(a, b, begin, mid); // sort from begin to mid-1 
    mergesort(a, b, mid, end);  // sort from mid to end-1 
    merge(a, b, begin, mid, end); // merge the two parts 
}