【发布时间】:2016-02-20 17:18:46
【问题描述】:
我正在尝试在 java 中编写一个简单的方法,该方法将在 int[] 上执行快速排序,但我不断得到一个在我的结果中不合适的值。
任何帮助了解我哪里出错了,我们将不胜感激。以下是我的代码:
public static void quickSort(int[] arr, int left, int right){
if (left < right){
int p = partition(arr, left, right);
quickSort(arr, left, p-1);
quickSort(arr, p+1, right);
}
}
public static int partition(int[] arr, int left, int right){
int pivot = arr[left];
int l = left+1;
int r = right;
while (l < r){
while (l<right && arr[l] < pivot){
l++;
}
while (r>left && arr[r] > pivot){
r--;
}
if (l < r){
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
arr[left] = arr[r];
arr[r] = pivot;
return r;
}
【问题讨论】:
-
如果
right等于left+1怎么办?这两个元素无需任何关键比较即可交换。 (哦,如果枢轴在循环之后一直保持在arr[left]中,则比较r>left是多余的。)
标签: java arrays algorithm sorting quicksort