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
方法中修改的数组元素相同。
我只是对 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
方法中修改的数组元素相同。