我刚才有一个关于我的Java快速排序代码的问题。
public class QuickSort{
public void sort(int array[]){
quickSort(array,0,array.length-1);
}
public void quickSort(int array[], int left, int right){
int index = partition(array,left,right);
if(left<index-1){
quickSort(array,left,index-1);
}
if(index<right){
quickSort(array,index,right);
}
}
public int partition(int array[], int left, int right){
int pivot = array[(left+right)/2];
while(left<=right){
while(array[left]<pivot){
left++;
}
while(pivot<array[right]){
right--;
}
if(left<=right){
int temp=array[left];
array[left]=array[right];
array[right]=temp;
left++;
right--;
}
}
return left;
}
public static void main(String args[]){
int iArr[] = {23,44,1,2009,2,88,123,7,999,1040,88};
QuickSort ms = new QuickSort();
ms.sort(iArr);
for(int i=0;i<iArr.length;i++){
System.out.println(iArr[i]);
}
}}
在上面的代码中,我将一个数组传递给一个不返回任何东西的排序方法。因此,main方法中的原始数组必须仍未排序。但是,当我在调用sort方法后尝试在main方法中打印原始数组的值时,它们会以某种方式排序。
当我没有从sort方法返回任何内容时,如何对main方法中的数组进行排序。我知道范围仅限于方法。
请解释一下。谢谢。
答案 0 :(得分:1)
因为java数组是引用类型,所以你只是将数组的引用传递给方法。
引用本质上是实际数组数据在内存中的位置
当您致电quicksort
时,它会复制数组的地址,但不会复制该地址的数据。
因此,您在调用方法中看到的元素与您在quicksort
方法中修改的元素元素相同。