Quicksort没有按预期工作

时间:2014-11-10 06:39:49

标签: java quicksort

我试图在Java中为quicksort实现CLRS伪代码,而且我无法使数组排序正确。我写的代码是:

private void PrintNumbers(int[] numbers) {
    for(int number:numbers) {
        System.out.print(number + " ");
    }
    System.out.println("");
}

private void swap(int[] numbers, int i, int j) {
    int temp;
    temp = numbers[j];
    numbers[j] = numbers[i];
    numbers[i] = temp;
}


private int Partition(int[] numbers, int start, int end) {
    int i = start - 1;
    int wall = numbers[end];
    int j;
    for(j = start; j < end - 1; j++) {
        if(numbers[j] <= wall) {
            i++;
            swap(numbers, i, j);
        }
    }

    swap(numbers, i+1, end);
    return i+1;
}

private void QuickSort(int[] numbers, int start, int end) {
    if(start < end) {
        int q = Partition(numbers, start, end);
        QuickSort(numbers, start, q-1);
        QuickSort(numbers, q+1, end);
    }
}

public static void main(String[] args) {
    int[] numbers = {2, 8, 7, 1, 3, 5, 6, 4};
    QS qs = new QS();
    qs.QuickSort(numbers, 0, numbers.length-1);
    qs.PrintNumbers(numbers);
}

我为该代码获得的输出是:2 3 1 4 5 7 8 6 知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

for(j = start; j < end - 1; j++)应为for(j = start; j < end; j++)。其他的东西是java中的所有方法和变量应该以小写字母开头,比如PrintNumbers应该是printNumbers。

当你第一次从main方法调用QuickSort时,你不需要每次减去一个。