词典快速排序

时间:2012-11-12 21:03:55

标签: 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"},这不是字典顺序。当然,计算机不能随机工作,所以我的代码一定有问题。我试图在纸上找出一个例子但我会发现一些完全错误的东西。但是我将我的代码基于对double数组进行排序的快速排序实现,所以我认为我没有做出很大的推理错误。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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