繁体   English   中英

此QuickSort实施有什么问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM