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

标签 java quicksort in-place

我在 https://en.wikipedia.org/wiki/Quicksort 上使用名为 Lomuto 分区方案的伪代码。但我只是不明白我在这里做错了什么。该数组永远不会被组织起来(无论输入大小如何)。这是我为期末考试做的准备。我的教授希望我们使用这个算法,但我不能只是学习它,除非我通过测试了解它是如何工作的。

private static void quickSort(Integer A[], int l, int r) {

    if (l < r) {
        int k = partition(A, l, r);
        quickSort(A, l, k - 1);
        quickSort(A, k + 1, r);
    }
}

private static int partition(Integer A[], int l, int r) {
    int pivot = A[r];
    int i = l;

    for (int j = l; j <= r - 1; j++) {
        if (A[j] <= pivot) {
            i++;
            int temp = A[j];
            A[j] = pivot;
            pivot = temp;
        }
    }

    int temp = A[i + 1];
    A[i + 1] = A[r];
    A[r] = temp;

    return i + 1;
}

最佳答案

除了你没有正确转录伪代码之外,我不知道还能说什么。在 partition 的开头,i 应等于 l - 1,但您将其设置为 l

此外,您不会在嵌套循环中将 A[i]A[j] 交换。这是正确的实现:

private static int partition(Integer A[], int l, int r) {
    int pivot = A[r];
    int i = l - 1;

    for (int j = l; j <= r - 1; j++) {
        if (A[j] < pivot) {
            i++;
            int temp = A[i];
            A[i] = A[j];
            A[j] = temp;
        }
    }

    int temp = A[i + 1];
    A[i + 1] = A[r];
    A[r] = temp;

    return i + 1;
}

关于java - 用 Java 实现维基百科就地快速排序伪代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713277/

相关文章:

java - Apache Directory Studio java 已启动但返回退出代码=13

java - 在 Android 中长按单个项目时,如何更改所有 RecyclerView 项目的可见性?

c - Q排序多维数组

bash - jq 直接替换文件上的文本(如 sed -i)

python - 在 groupby 中使用 sort_values 和 inplace=True 时到底出了什么问题?

java - Java 中的 printf 格式化

java - 比较顺序是否存在差异?

algorithm - 在第一个快速排序分区之后寻找可能的枢轴

c - 如何修改此快速排序算法的主元选择?

mysql 以优化的方式向大表添加多列