Java快速排序返回部分排序的列表

Java快速排序返回部分排序的列表,java,sorting,quicksort,Java,Sorting,Quicksort,我的程序(一个使用字母频率解密东西的解密程序)有两个数组列表,它用来跟踪字母频率。我将这些数组列表配对,以便一个(输入中的字符列表)始终链接到另一个(输入中的频率列表),以便一个中索引I处的字符始终对应于另一个中索引I处的频率。我使用快速排序算法按降序排序。以下是快速排序和交换方法的代码: private static void quickSort(int low, int high){ int i = low; int j = high; long middle =

我的程序(一个使用字母频率解密东西的解密程序)有两个数组列表,它用来跟踪字母频率。我将这些数组列表配对,以便一个(输入中的字符列表)始终链接到另一个(输入中的频率列表),以便一个中索引I处的字符始终对应于另一个中索引I处的频率。我使用快速排序算法按降序排序。以下是快速排序和交换方法的代码:

private static void quickSort(int low, int high){


    int i = low;
    int j = high;
    long middle = freqInCiphertext.get((low+high)/2);

    while (i < j) {
        while (freqInCiphertext.get(i) > middle) {
            i++;
        } //End while
        while (freqInCiphertext.get(j) < middle) {
            j--;
        }//End while
        if (j >= i) {
            swap(i, j);
            i++;
            j--;
        } // End if
    } // End while


    if (low<j) {
        quickSort(low, j);
    } else if (i<high) {
        quickSort(i, high);
    } //end if
}//End quickSort

private static void swap(int i, int j) {
int tempInt = freqInCiphertext.get(i);
String tempString = charsInCiphertext.get(i);

freqInCiphertext.set(i, freqInCiphertext.get(j));
charsInCiphertext.set(i, charsInCiphertext.get(j));

freqInCiphertext.set(j, tempInt);
charsInCiphertext.set(j, tempString);
}// End swap

有人能看出算法中有什么错误吗?我已经尝试过几种不同的方法(比如a>=而不是a>,等等),但是运气不好。

既然j可以>比低,我可以<高,你不想做“如果(我<高)”。这应该是一个单独的if likeso:

if (low<j) {
    quickSort(low, j);
}

if (i<high) {
    quickSort(i, high);
}

if(低)在这种情况下,使用鸽子洞排序会更快。您是否查看过自动排序的一些更高级的集合的集合包,如PriorityBlockingQueue?我在订购线程以供使用方面运气很好。Britnight,如果这解决了问题,请给spdaley一个正确的答案。:)
if (low<j) {
    quickSort(low, j);
}

if (i<high) {
    quickSort(i, high);
}