带有归并排序示例的递归调用问题



好吧,我不太明白这里是如何分配的。我有以下代码

public static void sort(int[] array)
{
if(array.length < 2)
{
return;
}
int[] left = Arrays.copyOfRange(array, 0, array.length / 2);
int[] right = Arrays.copyOfRange(array, array.length / 2, array.length);
sort(left);
sort(right);
merge(left, right, array);
}

好的,假设你有一个8元素的数组例如{209,47,16,82,34,552,1995,1024}好的,所以我得到什么,它调用调用,调用然后最终离开了包含209个包含47,然后合并,然后回到原来的调用包含209和47岁的和正确的包含16到82年,除左排序,我不明白的是,左边和右边分别含有{209}和{47}得到合并成数组,然后当它回溯到那叫把4个元素分成2组2,左边包含在我们完成merge调用时数组所包含的已排序的元素{47,209}。left's如何获取数组内容??如果有人能帮助我理解这一点,我将不胜感激merge函数基本上就是将2合并到数组中,没有别的了。

据我所知,你问的是,在第一次合并发生后,数据是如何从数组上升到s1的。

答案基本上是程序通过引用将's1'作为'数组'传递给排序函数。因此,'array'只是数组's1'的别名。这在每次调用sort函数时都会发生。

希望这回答了你的问题!

最新更新