0

配列をソートするために2つではなく3つの部分にマージソートするマージソートを作成し、マージソートが正しく機能するかどうかをテストするコードを作成しました。テストのコードは次のとおりです。

while (true){

    Random rand = new Random();

    int[] randArray = new int[rand.nextInt(2000)];

    for (int i = 0; i < randArray.length; i++) {
        randArray[i] = rand.nextInt();
    }

    int[] temporary = new int[randArray.length];

    System.arraycopy(randArray, 0, temporary, 0, randArray.length);

    mergesort(randArray);

    Arrays.sort(temporary);

    if (Arrays.equals(randArray, temporary)){
        System.out.println("YES");
    } else {
       break;
    }

    }       
}

私がやっていることは、毎回最大2000の整数の配列を作成し、その配列をランダムな整数で埋めてから、その配列を一時配列に格納します。その後、元の配列でマージソートを使用しArrays.sort()、一時配列のメソッドを使用します。次に、2つの配列が等しい場合は、YESを出力します。そうでない場合は、whileループから抜けます。

今のところ、whileループから壊れておらず、アルゴリズムが正しいことを示しているので、ここで実行してテストコードを正しく記述したかどうかを尋ねています。

編集:それはループを中断することなく常にYESを印刷しているので、私はそれが機能していると信じていますが、私は確信できるように求めています

4

1 に答える 1

0

あなたのテストコードは私には良いように思えます、そしてそれはあなたのアルゴリズムもほとんど良いことを意味します。一方で、誤解しないでください。しかし、この種のテストは、迅速で汚いチェックにすぎないと見なすことができます。適切なテストを行いたい場合は、以下をテストする必要があります。

  • 簡単な例で幸せな道
  • 境界条件
  • エラー状態

JUnitのような自動テストフレームワークの使用も検討する必要があります。

そして最後に、テストの結果は実行ごとに変わる可能性があるため、テストでランダム入力を使用することはお勧めできません。

于 2012-05-21T19:48:18.440 に答える