java - 快速排序未按预期工作

标签 java quicksort

我正在尝试在 Java 中实现快速排序的 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 知道我做错了什么吗?

最佳答案

for(j = start; j < end - 1; j++)应该是for(j = start; j < end; j++) 。另一件事是在java中所有的方法和变量都应该以小写字母开头,比如PrintNumbers应该是printNumbers。

当您调用QuickSort时,您不需要每次都减一。第一次从 main 方法开始。

关于java - 快速排序未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838126/

相关文章:

c - OpenMP 递归并行性 (QuickSort)

java - 如何超快速地插入 100,000 个父行,每个行有 200 个子行?

java - 在 URLClassPath 类的 Debug模式下有 MyEclipse 隐式断点

java - 将preparedStatement添加到select语句中

python - 谁能告诉我快速排序代码中的错误是什么

Python 反向快速排序

java - JSoup,如何从动态 <a href> 标签返回数据

java - Mongo - 忽略属性被持久化

java - 用 Java 实现维基百科就地快速排序伪代码

c - 在 C 中实现降序快速排序