Java 合并排序中的递归是如何工作的?如何分配内存?
如何分配堆栈内存?Java 合并排序中的递归是如何工作的?如何分配内存?,java,c,data-structures,recursion,mergesort,Java,C,Data Structures,Recursion,Mergesort,如何分配堆栈内存? 我不明白递归在这里是如何工作的 请解释一下分区函数中注释了“第4行”的那一行。并解释何时执行这一行 void partition(int arr[],int low,int high){ int mid; if(low<high){ mid=(low+high)/2; partition(arr,low,mid); partition(arr,mid+1
我不明白递归在这里是如何工作的
请解释一下分区函数中注释了“第4行”的那一行。并解释何时执行这一行
void partition(int arr[],int low,int high){
int mid;
if(low<high){
mid=(low+high)/2;
partition(arr,low,mid);
partition(arr,mid+1,high); //line 4
mergeSort(arr,low,mid,high);
}
}
void mergeSort(int arr[],int low,int mid,int high){
int i,m,k,l,temp[MAX];
l=low;
i=low;
m=mid+1;
while((l<=mid)&&(m<=high)){
if(arr[l]<=arr[m]){
temp[i]=arr[l];
l++;
}
else{
temp[i]=arr[m];
m++;
}
i++;
}
if(l>mid){
for(k=m;k<=high;k++){
temp[i]=arr[k];
i++;
}
}
else{
for(k=l;k<=mid;k++){
temp[i]=arr[k];
i++;
}
}
for(k=low;k<=high;k++){
arr[k]=temp[k];
}
void分区(int-arr[],int-low,int-high){
int mid;
如果(低检查这张图片,它是MergSort的图形表示
第一行表示原始Ary。
现在将调用分区函数。第3行将调用{38,27,43,3}上的分区函数
第四行将调用{9,82,10}上的分区函数,并将它们划分为小分区,然后再次调用相同的函数。
这个过程将持续到低<高。在图片中,直到第4行。之后,它将返回,并将开始通过MargSort函数合并这些分区。我没有看到第4jhjklbjkbhkvhjvhyjkvhkvhikvgyuvyulgv68ov;-)第4行处理数组的后半部分。从mid+1
到end
。我知道它是如何执行的??这个合并排序算法的堆栈表示形式是什么?当您在调试器中逐步执行代码时,您会看到什么?