【发布时间】:2017-07-07 05:39:19
【问题描述】:
这是合并排序的方法:
private void doMergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
System.out.println("Lower index="+lowerIndex+" Middle="+middle+ " Higher index="+higherIndex);
doMergeSort(lowerIndex, middle);
doMergeSort(middle + 1, higherIndex);
mergeParts(lowerIndex, middle, higherIndex);//never mind this method
}
}
doMergeSort(0,9) 的输出如下所示:
Lower index=0 Middle=4 Higher index=9
Lower index=0 Middle=2 Higher index=4
Lower index=0 Middle=1 Higher index=2
Lower index=0 Middle=0 Higher index=1
Lower index=3 Middle=3 Higher index=4//This line
Lower index=5 Middle=7 Higher index=9
Lower index=5 Middle=6 Higher index=7
Lower index=5 Middle=5 Higher index=6
Lower index=8 Middle=8 Higher index=9
4 11 23 28 43 45 65 77 89 98 //never mind this part too
输出的第 4 行(标有注释)是如何产生的?请解释一下。
【问题讨论】:
-
这是从
doMergeSort(0,4)进行的第二次递归调用:middle 计算为 2,因此您调用 (0,2) 和 (3,4)。为什么你有这个问题? -
您在单步执行代码时遇到问题吗?如果在 println 处设置断点,则可以在打印该特定行时看到递归的调用堆栈。
-
@jasonharper 那么这是否意味着函数 doMergeSort(0,4) 和 doMergeSort(3,4) 都是同时执行的?
标签: java sorting recursion data-structures computer-science