我是编程新手,我试图在java上实现Quicksort。我的代码似乎运行正常。但是有些事情我无法理解。称为“分区”的静态方法(如下面的代码片段所示)将返回一个“ int”类型的变量并处理数组“ arr”。现在,当我使用输入将其称为“ arr”来调用QuickSortAlgo方法时,为什么在QuickSortAlgo方法内部使用的这个“ arr”数组是操纵/修改后的数组(在方法“ partition”中进行了修改)?当方法'partition'结束时,不应忘记数组'arr'(在分区中修改),因为方法'partition'仅返回'int'?
public static double[] QuickSortAlgo(double arr[],int low, int high){
if(low<high){
int pi=partition(arr,low,high);
QuickSortAlgo(arr, low, pi-1); // Before pi
QuickSortAlgo(arr, pi+1, high); // After pi
}
答案 0 :(得分:1)
这里:
public static double[] QuickSortAlgo(double arr[],int low, int high){
您的方法QuickSortAlgo()
(例如,最好命名为runQuicksort()
)会收到一个引用,它指向一个双精度值数组。
然后传递该引用:
int pi=partition(arr,low,high);
这意味着:两种方法都“看到”内存中的相同对象(双精度数字数组)。内存中只有一件事,partition()
的返回类型与此无关。
因此,除非partition()
首先创建一个NEW数组并从传递给它的数组中复制内容,否则它只能在所在的相同内存区域中正常工作 “。
除此之外,您可能想了解pass by value for java references。