java - 快速排序算法显示错误的输出

标签 java sorting data-structures quicksort

我已经编写了快速排序的代码,但它显示异常数组索引越界。用 C 编写时可以正常工作,但在 Java 中则不起作用。请告诉它有什么问题。任何建议都会受到赞赏。它是双向划分标准 CLRS 算法。

package Sorting;

public class QuickSort {

    public static void main(String arg[]) {
        int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };

        Sort(a, 0, a.length - 1);
        for (int i = 0; i < 9; i++) {
            System.out.print(" " + a[i]);
        }

    }

    private static void Sort(int[] a, int i, int j) {
        // TODO Auto-generated method stub
        if (i < j) {
            int k = Partition(a, i, j);
            Sort(a, i, k - 1);
            Sort(a, k + 1, j);

        }
    }

    private static int Partition(int[] a, int i, int j) {
        // TODO Auto-generated method stub
        int temp;
        int x = a[j];
        int l = i - 1;
        for (int n = i; n < j; n++) {
            if (a[n] >= x) {
                l++;
                temp = a[l];
                a[l] = a[n];
                a[n] = temp;
            }
        }
        temp = a[x];
        a[x] = a[l + 1];
        a[l + 1] = temp;
        return l + 1;

    }
}

输出:9 3 5 7 4 1 6 2 8

最佳答案

您的代码中有一些小错误,这是更新的代码:

    private static int Partition(int[] a, int i, int j) {
    // TODO Auto-generated method stub      
    int temp;
    int x = a[j];
    int l = i - 1;
    for (int n = i; n < j; n++) {
        if (a[n] <= x) {      /*******Condition was wrong******/
            l++;
            temp = a[l];
            a[l] = a[n];
            a[n] = temp;
        }
    }
    temp = a[j];      /******a[j] not a[x] x is value of pivot element******/
    a[j] = a[l + 1];
    a[l + 1] = temp;
    return l + 1;
}

关于java - 快速排序算法显示错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431609/

相关文章:

java - 使用oracle、SQLServer2000还是MySQl哪个数据库

java - 如何处理 Java 中的网络连接问题

Javascript 按字母顺序排序;如何将数值与数字进行比较,同时将它们与字符串进行比较?

sorting - Primefaces 10+ Datatable如何从SortEvent获取排序列?

algorithm - 在 N 个列表中查找匹配项的有效方法?

algorithm - 使用二叉树求解字母表达式得到句子

java - Selenium - 获取列标题下的所有单元格

java - 我怎样才能用for循环来实现这个方法

php - PHP 中 natsort 的任何替代方案,在处理带零的字母数字字符时不会失败

javascript - 二叉搜索树 'remove'函数的优化