QuickSort算法

时间:2015-01-08 19:46:41

标签: java quicksort

我刚才有一个关于我的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方法中的数组进行排序。我知道范围仅限于方法。

请解释一下。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

当您致电quicksort时,它会复制数组的地址,但不会复制该地址的数据。

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