私のプログラム(文字の頻度を使用して物事を復号化する復号化機能)には、文字の頻度を追跡するために使用する2つのArrayListがあります。これらのArrayListをペアにして、一方(入力の文字のリスト)が常に他方(入力の頻度のリスト)にリンクされるようにし、一方のインデックス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
ただし、コードを実行すると、次のように部分的に並べ替えられた配列リストが返されます。
[ , e, t, a, o, n, i, h, r, d, l, u, s, m, z, q, x, j, v, k, p, f, w, c, b, y, g]
[64031, 25856, 19326, 17571, 16398, 14349, 14200, 12784, 11617, 9930, 8391, 5820, 12934, 5636, 173, 178, 312, 356, 1929, 2175, 3186, 4310, 5479, 4666, 3491, 4673, 5100]
誰かがアルゴリズムのエラーを見ることができますか?私はすでにいくつかの異なる方法(>の代わりに> =など)を試してみましたが、運がありませんでした。