Java 中的 QuickSort 算法

QuickSort algorithm in Java

我只是对 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]);
    }
}}

在上面的代码中,我将一个数组传递给一个排序方法,它没有 return 任何东西。因此,main 方法中的原始数组必须仍未排序。但是,当我尝试在调用 sort 方法后在 main 方法中打印原始数组的值时,它们以某种方式排序。

当我没有从 sort 方法中 returned 任何内容时,如何对 main 方法中的数组进行排序。我知道范围仅限于方法。

请解释一下。

这是因为 java 数组是引用类型,所以您只是将数组的引用传递给方法。

引用本质上是实际数组数据在内存中的地址

当你调用quicksort时,它会复制数组的地址,但不会复制该地址处的数据。

因此,您在调用方法中看到的元素与您在 quicksort 方法中修改的数组元素相同。