我无法猜出我的代码有什么问题。 输入:10,7,8,9,1,5 输出:5 7 9 8 10 1
public class QuickSort {
public static void quickSort(int arr[], int p, int r) {
if (p < r) {
// System.out.println(p+" "+r);
int q = partition(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
public static int partition(int arr[], int p, int r) {
int pivot = arr[r];
int i = p - 1;
for (int j = p; j < r - 1; j++) {
// System.out.println("j");
if (arr[j] <= pivot) {
i = i + 1;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[r];
arr[r] = temp;
return i + 1;
}
static void printArray(int arr[]) {
int n = arr.length;
for (int i = 0; i < n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
}
请明确我的疑问,在哪里更改代码,以便它正常工作。
答案 0 :(得分:2)
您没有迭代到循环的末尾(最后一个元素)。因此,分区功能不会正确地分隔元素,因为它在枢轴左侧较小,而在枢轴右侧较大。
你的for循环
for (int j = p; j < r - 1; j++) {
更改为
for (int j = p; j <= r - 1; j++) {
现在工作正常。 见Ideone