gpt4 book ai didi

java - 谁能解释一下这个 Java Mergesort 行为解释?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:25 24 4
gpt4 key购买 nike

我有这段代码,我试图理解它的棘手行为,是的,整个程序都可以运行,我只是无法理解它的棘手行为:

private static void mergesort(int data[], int low, int high)
{
int m; // Midpoint in the array

if (low < high)
{
// Compute sizes of the two halves
// Rounding to least significant value (next lower integer, implicit casting)
m = (low + high) / 2 ;
mergesort(data, low, m); // Sort data[first] through data[first+n1-1]
mergesort(data, m+1, high); // Sort data[first+n1] to the end Porque aumenta high sólo si los parametros iniciales son (data, 0, 0)
merge(data, low, high, m);
}
}

假设我有一个列表数据:{5, 3, 1, 2, 4}

如果我介入监控参数(data[], low, high) 和子产品m (low + high/2),我们在 if 条件之后对 mergesort 进行了递归调用,特别是这条指令:

mergesort(data, low, m); 

我得到:

STEP  1 2 3 4
low 0 0 0 0
high 4 2 1 0
mid 2 1 0 0

到目前为止你所看到的一切都很好(这对我来说很有意义)但我们有条件:

 if (low < high)

对于 low = 0high = 0 不成立,它退出 if(没有 else)并返回到调用函数执行的位置另一批指令:

merge(data, low, high, m);

但根据调试器,它是用 low = 0high = 1m = 0 调用的。为什么用这些参数调用它? high 是如何增加的?

最佳答案

高不递增。每次递归调用,high 减半。 4、2、1、0。它以这种方式调用,将列表分成尽可能小的部分,以便合并它们。它继续重复出现,直到(对于这部分代码)低和高相同。

关于java - 谁能解释一下这个 Java Mergesort 行为解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com