Strings
Javaのクイックソートアルゴリズムを使用して、配列を辞書順にソートしようとしています。配列は、 を使用してターミナル経由で読み込まれ、Scanner
に保存されますArrayList
。これArrayList
は後で配列に変換され、クイックソートアルゴリズムを適用します。私には2つの方法があります:
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"}
、これは辞書順ではありません。もちろん、コンピューターはランダムに動作するわけではないので、私のコードに何か問題があるに違いありません。紙に例を書き出そうとしましたが、完全に間違っていることがわかります。ただし、ダブル配列をソートするクイックソートの実装に基づいてコードを作成したので、大きな推論エラーを犯したとは思いません。前もって感謝します。