java - 字典顺序快速排序

标签 java algorithm sorting quicksort

我尝试使用 Java 中的快速排序算法按字典顺序对 Strings 数组进行排序。该数组使用 Scanner 通过终端读取并保存在 ArrayList 中。此 ArrayList 后来被转换为一个数组,我(尝试)在其中应用快速排序算法。 我有两种方法:

private static void sortA(String[] s, int start, int end) {
    if (end > start) {
        int pivot = partition(s, start, end);
        sortA(s, start, pivot - 1);
        sortA(s, pivot + 1, end);
    }
}

private static int partition(String[] s, int start, int end) {
    String pivot = s[end];
    int left = start;
    int right = end;
    String temp = "";
    do {
        while ((s[left].compareTo(pivot) <= 0) && (left < end))
            left++;
        while ((s[right].compareTo(pivot) > 0) && (right > start))
            right--;
        if (left < right) {
            temp = s[left];
            s[left] = s[end];
            s[right] = temp;
            printRow(s);

        }
    } while (left < right);
    temp = s[left];
    s[left] = s[end];
    s[end] = temp;
    return left;
}

代码似乎随机地工作正常然后突然就不行了。例如,数组 {"java", "application", "system"} 可以很好地排序为 {"application", "java", "system"}。数组{"library", "content", "bin"}排序为{"bin", "library", "contents"},不是字典序命令。当然,计算机不会随机工作,所以我的代码一定有问题。我试图在纸上找出一个例子,但后来我会发现一些完全错误的东西。但是,我的代码基于对双数组进行排序的快速排序实现,因此我认为我没有犯大的推理错误。 提前致谢。

最佳答案

您以错误的方式拆分数组: 正确的拆分是 "pivot-1""pivot"

sortA(s, start, pivot-1);
sortA(s, pivot, end);

关于java - 字典顺序快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351538/

相关文章:

java - 循环减少数万,然后数千,然后数百,然后数十

java - 如何在Java中制作这种自定义算法?

algorithm - 查找具有目标按位 AND 值的子数组

mysql - 使用 mysql order case 对特定行进行排序

arrays - 给定一个正整数和负整数数组,重新排列它,使一端有正整数,另一端有负整数

java - 如何实现基于 openId java web 的应用程序?

java - 将外部 Groovy 文件与 Jenkins 管道结合使用

python - 二叉树中序遍历

java - 如何对两个 ArrayList 进行排序,同时合并为一个?

java - 通过包含另一个属性文件来扩展属性文件。 maven