这个QuickSort实现有什么问题?

时间:2016-03-15 15:54:18

标签: java algorithm data-structures

我无法猜出我的代码有什么问题。 输入: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();
    }
}

请明确我的疑问,在哪里更改代码,以便它正常工作。

1 个答案:

答案 0 :(得分:2)

您没有迭代到循环的末尾(最后一个元素)。因此,分区功能不会正确地分隔元素,因为它在枢轴左侧较小,而在枢轴右侧较大。

你的for循环

for (int j = p; j < r - 1; j++) {

更改为

for (int j = p; j <= r - 1; j++) {

现在工作正常。 见Ideone