[英]Whats wrong with this QuickSort implementation?
我无法猜测我的代码出了什么问题。 输入: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();
}
}
请澄清我的疑问,在哪里更改代码,以便正常工作。
您没有迭代到循环的末尾(最后一个元素)。 因此,分区功能将无法正确分隔元素,使其在枢轴左侧变小而在枢轴右侧变大。
您的for循环
for (int j = p; j < r - 1; j++) {
改成
for (int j = p; j <= r - 1; j++) {
现在工作正常。 见这里Ideone
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.