2

こんにちは私はループについて学んでいますが、ループを行うためのより簡単なまたは別の方法はありますか?
ループをさまざまな方法で試してみているので、理解を深めることができます。
どうもありがとう。

private char guesses [] = new char[26];

void sort() {
    boolean doMore = true;
    while(doMore) {
        doMore = false;
        for(int i = 0; i < guesses.length - 1; i++) {
            if(guesses[i] > guesses[i+1]) {
                char temp = guesses[i];
                guesses[i] = guesses[i+1];
                guesses[i+1] = temp;

                doMore = true;
            }
        }
    }
}
4

5 に答える 5

1

いいえ、これはかなり標準的なバブルソートです。それを変更できる他の唯一の方法は、次のような「do...while」ループを使用することです。

void sort() {
boolean doMore;
do {
    doMore = false;
    for(int i = 0; i < guesses.length - 1; i++) {
        if(guesses[i] > guesses[i+1]) {
            char temp = guesses[i];
            guesses[i] = guesses[i+1];
            guesses[i+1] = temp;

            doMore = true;
        }
    }
} while (doMore);
于 2012-09-05T22:02:46.373 に答える
0

このアルゴリズムは、配列を最小から最大に並べ替えます。これを行うには他にもたくさんの方法があります(あなたはバブルソートと呼ばれ、あなたが示したもの以外にそれを実装する方法は多くありません)、そのうちのいくつかはここで読むことができます。注意として、デュアルピボットクイックソートjava.util.Arrays.sort(int[] a)を使用するはいつでも使用できます。

于 2012-09-05T22:04:31.153 に答える
0

Javaの少年ではありませんが、もしそれが私なら、forループをそれ自身の関数に入れて、それがtrueを返すようにします。ここで、現在domoreを設定してから

do-while {SomeSuitableFunctionName};

コードをはるかに理解しやすくします。

于 2012-09-05T22:06:06.310 に答える
0

最初、あなたのソートアルゴリズムはそれほど良くありません、それは約nかかります!時間、n * log(n)時間の非常に優れたアルゴリズムがあります。興味がある場合は、この http://en.wikipedia.org/wiki/Quicksortを確認できます。ループについては、を使用できますwhilefordo whileそして必要に応じて、演算子を使用してループを作成することもできますがgo to、それは良い方法ではありません。質問がある場合は、質問することができます;)

于 2012-09-05T22:14:36.697 に答える
-1

派手になりたい場合は、xorを使用して変数を交換できますが、コードが他のユーザーにわかりにくくなる可能性があるため、お勧めしません。

aとbの値を交換するには、このコードを実行できます

a ^= b; 
b ^= a;
a ^= b;

配列を並べ替えようとしているようですので、これにはArrays.sortを使用することをお勧めします。

APIはこちら

ループの使用に関しては-それは仕事をしますが、私はソートのための車輪を再発明しません。

于 2012-09-05T22:01:58.047 に答える