1
import java.util.ArrayList;
import java.util.Random;

public class Final
{
    public static void main(String[]arg)
    {
        ArrayList<Integer>randomNumber2=new ArrayList<Integer>();
        Random rand=new Random();
        for(int i=0;i<10;i++)
        {
            randomNumber2.add(new Integer(rand.nextInt(50)));
        }
}

1 ~ 50 の数字を生成するこのランダム生成配列リストを作成しました。生成された数値を昇順に並べ替えたい。Collection.sort を使用せずに、ArrayList を使用してそれを行うにはどうすればよいでしょうか?

4

3 に答える 3

1

コードをコピーして貼り付けるだけではなく、ここで答えを考えてみましょう。10 個の値があり、昇順で配列に追加したいとします。実際に頭の中でそれを行うとしたら、どのように整理しますか?

1 つの方法 (簡単です。ここで説明できます。実装できるはずです) は、最初の番号を Arraylist の先頭に割り当てることです。次に、2 番目の数値が生成されたら、それを Arraylist の最初の値と照合します。新しく生成された数値が、照合した数値よりも小さい場合は、その最初の数値を Arraylist の 1 スロット分戻し、新しい値をプラグインします。新しく空いた場所の番号。

新しく生成された数値、たとえば Arraylist 内の 2 つの数値をチェックし、この新しい数値が最初の数値と 2 番目の数値の値の間にある場合、新しい数値を最初の数値と照合すると、チェックアウトしてコードに沿って続行します。 . 次に、新しい番号を Arraylist の 2 番目の番号と照合し、それが小さいことがわかったら、その番号を ArrayList の 1 スロット分戻し、新しい番号をスロット 2 に差し込みます。

新しく生成された数値をこれまでの 3 つの数値 (これは現在 4 回目の反復です) に対してチェックし、それが空の arraylist の 4 番目の値に到達した場合、新しく生成された数値をその 4 番目のスロットに割り当てる必要があります。新しい最大値。

これは私が望んでいるほど意味がありませんが、これはラボ/PA/ハードウェア/そのようなもののためのものだと思います。ですから、私が書いたことを理解して、独自のコードを書いていただければ幸いです。これは最も効率的な方法ではありませんが、ほぼ誰でもコーディングできる理解しやすい方法であり、教室での簡単な課題には最適です。

乾杯!

于 2013-04-28T03:22:54.280 に答える
-3

非常に多くの並べ替えアルゴリズムがありますが、パフォーマンスが懸念されるようには聞こえず、これは宿題かもしれません...

だからスリープソートを試してみてください!

import java.util.ArrayList;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class Final {

    private static int count = 10;

    public static void main(String[] arg)
    {
        ArrayList<Integer> randomNumber2 = new ArrayList<Integer>();
        Random rand = new Random();

        for (int i = 0; i < count; i++) {
            randomNumber2.add(new Integer(rand.nextInt(50)));
        }

        Timer timer = new Timer();
        for(final Integer i : randomNumber2) {
            timer.schedule(new TimerTask()
            {
                public void run()
                {
                    System.out.println(i);
                    --count;
                }
            }, i * 50L);
        }
        while(count > 0){ Thread.yield();}
        timer.cancel();
    }
}
于 2013-04-28T03:04:37.613 に答える