合并排序中的递归流混淆

时间:2015-12-28 04:25:54

标签: java algorithm sorting recursion

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 = 1low = 0;那么当mergeSort(mid+1, high)被调用时,它会通过mergeSort(0+1, 1)所以现在high = 1low = 1因此if语句失败,并走到方法的最后。

我觉得令人困惑的是,当if语句失败并跳出high = 1;low = 1;的方法后,程序会跳回mergeSort(mid+1, high);并且神奇地low = 0;mid = 1;high = 2;。我对程序如何流动以及为什么它在各处跳跃感到困惑。

1 个答案:

答案 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);