public class test {
public static void main(String[] args){
mergeSort(0, 4);
}
public static void mergeSort(int low, int high){
if(low < high){
int mid = (low + high) / 2;
mergeSort(low, mid);
mergeSort(mid+1, high);
}
}
}
当程序到达mergeSort(mid+1,high);
时,我有些困惑。如果是,high = 1
和low = 0;
那么当mergeSort(mid+1, high)
被调用时,它会通过mergeSort(0+1, 1)
所以现在high = 1
和low = 1
因此if语句失败,并走到方法的最后。
我觉得令人困惑的是,当if语句失败并跳出high = 1;
和low = 1;
的方法后,程序会跳回mergeSort(mid+1, high);
并且神奇地low = 0;
,mid = 1;
和high = 2;
。我对程序如何流动以及为什么它在各处跳跃感到困惑。
答案 0 :(得分:0)
它并非“遍布各处”。 有一种模式。
高低调用的log base 2是mergeSort(低,中); 这些调用开始返回后,mergeSort(mid + 1,high);为每个人都要求。
对mergeSort(mid + 1,high)的调用将再次调用mergeSort(low,mid)。
在您的示例中,调用如下所示:mergeSort(0,4);
mergeSort(0,2);
mergeSort(0,1);
mergeSort(0,0);
mergeSort(1,1);
mergeSort(2,2);
mergeSort(3,4);
mergeSort(3,3);
mergeSort(4,4);