0

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

4

1 に答える 1

1

配列を間違った方法で分割しています: 正しい分割は "pivot-1" "pivot" です

sortA(s, start, pivot-1);
sortA(s, pivot, end);
于 2012-11-12T21:13:43.320 に答える