0

同じ100,000の乱数配列をすべてソートするさまざまなソート方法があります。

次の方法を使用して、それぞれのランタイムを見つけています

long insertionStart = System.currentTimeMillis();
   arr.Clone(iniArr);
   arr.insertionSort();
   long insertionFinal = System.currentTimeMillis() - insertionStart;

そして、乱数配列の場合は次のとおりです

int maxSize = 100000;  // array size
   Sortarr arr, iniArr;         // reference to array
   arr = new Sortarr(maxSize);  // create the array
   iniArr = new Sortarr(maxSize);

   // insert random numbers
   Random generator = new Random();
   for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

これを変更して、それぞれが 1 つではなく 100 個の配列を並べ替え、各配列の時間をカウントできるようにするにはどうすればよいですか? 例えば。Run1 - 23ms; Run2 - 25ms; ... Run100 - 22ms

編集: 最後に 1 つのことがあります。したがって、各反復では、配列をいくつかの方法で並べ替えます。たとえば、挿入、マージ、およびクイック 並べ替えです。したがって、挿入 = 300 ミリ秒、マージ = 200 ミリ秒、クイック = 100 ミリ秒とします。反復ごとに、どのメソッドが最も速くソートされたかを見つける必要があります。

これは、下位のプログラミングクラスで何千回も行う単純な最小/最大タイプのことです。各値を配列にスローして、array.min 呼び出しを使用する方が簡単でしょうか? (それが実際に何であれ、Java構文には新しい..)

4

2 に答える 2

1

現在、配列を作成してから、さまざまな関数を使用して繰り返し並べ替えているようです。

あなたは単にそれらすべてをループに入れる必要があります。

int maxRuns = 100;

int maxSize = 100000;  // array size

for (int run=0; run<maxRuns; run++) {   
    Sortarr arr, iniArr;         // reference to array
    arr = new Sortarr(maxSize);  // create the array
    iniArr = new Sortarr(maxSize);

    // insert random numbers
    Random generator = new Random();
    for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

    long insertionStart = System.currentTimeMillis();
    arr.Clone(iniArr);
    arr.insertionSort();
    long insertionFinal = System.currentTimeMillis() - insertionStart;
    /* <more code goes here> */
}

run結果を印刷するときにインデックスを使用できます。

于 2010-11-06T02:54:18.007 に答える
0

あなたはおそらく次のようなことをしているでしょう:

for (int try = 0; try < 100; try++) {
   iniArr = new Sortarr(maxSize);

   // insert random numbers
   Random generator = new Random();
   for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

   long insertionStart = System.currentTimeMillis();
   arr.Clone(iniArr);
   arr.insertionSort();
   long insertionFinal = System.currentTimeMillis() - insertionStart;

   // print out the time, and/or add up the total
}

事前に初期化が必要です。配列がソートされる前に複製される理由がわかりません。その配列を直接ソートできますか?

于 2010-11-06T02:19:09.933 に答える