0

私は BubbleSort プログラムを作成しましたが、うまく機能し、優れた出力が得られ、十分に機能します。しかし、一度ソートした後、プログラムを再実行させることはできません。つまり、プログラムは 10000 の一意の数字の並べ替えを完了し、かかった時間とかかったステップの量を出力しますが、その後さらに 999 回実行されませんか?

要するに、平均実行時間を取得できるように、プログラムを 1000 回実行するのを手伝ってくれる人はいますか?

コードは次のとおりです。

public class BubbleSort {
   public static void main(String[] args) {
      int BubArray[] = new int[] { #10000 unique values unsorted# };

      System.out.println("Array Before Bubble Sort");
      for (int a = 0; a < BubArray.length; a++) {
         System.out.print(BubArray[a] + " ");
      }

      double timeTaken = bubbleSortTimeTaken(BubArray);
      int itrs = bubbleSort(BubArray);
      System.out.println("");
      System.out.println("Array After Bubble Sort");
      System.out.println("Moves Taken for Sort : " + itrs + " moves.");
      System.out.println("Time Taken for Sort : " + timeTaken
            + " milliseconds.");
      for (int a = 0; a < BubArray.length; a++) {
         System.out.print(BubArray[a] + " ");
      }
   }

   private static int bubbleSort(int[] BubArray) {

      int z = BubArray.length;
      int temp = 0;

      int itrs = 0;

      for (int a = 0; a < z; a++) {
         for (int x = 1; x < (z - a); x++) {

            if (BubArray[x - 1] > BubArray[x]) {

               temp = BubArray[x - 1];
               BubArray[x - 1] = BubArray[x];
               BubArray[x] = temp;

            }

            itrs++;
         }
      }

      return itrs;
   }

   public static double bubbleSortTimeTaken(int[] BubArray) {
      long startTime = System.nanoTime();
      bubbleSort(BubArray);
      long timeTaken = System.nanoTime() - startTime;
      return timeTaken;
   }
}

結果の出力は次のとおりです (1 回の実行に限定されていることに注意してください)。

Unsorted List : 
[13981, 6793, 2662, 733, 2850, 9581, 7744 .... ]
Sorted List with BubbleSort

Moves Taken to Sort : 1447551 Moves.
Time Taken to Sort : 1.2483121E7 Milliseconds.

[10, 11, 17, 24, 35, 53, 57, 60, 78, 89, 92 ... ]
4

2 に答える 2

1

編集されたコード...

public class BubbleSort {
    static double bestTime = 10000000, worstTime = 0;  //global variables
public static void main(String[] args) {
    int BubArray[] = new int[]{3,5,3,2,5,7,2,5,8};

    System.out.println("Array Before Bubble Sort");
    for(int a = 0; a < BubArray.length; a++){
    System.out.print(BubArray[a] + " ");

    }

  System.out.println("\n Entering Loop...");

  for(int i=0; i<1000;i++)
  {  
  bubbleSortTimeTaken(BubArray, i);
  }


        int itrs = bubbleSort(BubArray);
        System.out.println("");               
        System.out.println("Array After Bubble Sort");
        System.out.println("Moves Taken for Sort : " + itrs + " moves.");
        System.out.println("BestTime: " + bestTime + " WorstTime: " + worstTime);
        System.out.print("Sorted Array: \n");
            for(int a = 0; a < BubArray.length; a++){
                    System.out.print(BubArray[a] + " ");
            }
    }

 private static int bubbleSort(int[] BubArray) {

    int z = BubArray.length;
    int temp = 0;

    int itrs = 0;

    for(int a = 0; a < z; a++){
            for(int x=1; x < (z-a); x++){

                    if(BubArray[x-1] > BubArray[x]){

                            temp = BubArray[x-1];
                            BubArray[x-1] = BubArray[x];
                            BubArray[x] = temp;
                    }    

                    itrs++;
            }
    }

    return itrs;
}

public static void bubbleSortTimeTaken(int[] BubArray, int n) 
{

     long startTime = System.nanoTime();

     bubbleSort(BubArray);   

     double timeTaken = (System.nanoTime() - startTime)/1000000d;

     if(timeTaken > 0)
     {
         if(timeTaken > worstTime)
         {
             worstTime = timeTaken;
         }
         else if(timeTaken < bestTime)
         {
             bestTime = timeTaken;
         }

     }

     System.out.println("Loop number: "+n + " Time Taken: " + timeTaken);


}
}
于 2012-12-07T08:29:14.670 に答える
-1

メソッドを下に移動

private static int bubbleSort(int[] BubArray) 

を拡張する他のクラスにThread。実行が終了するたびに新しいスレッドを作成できる場合があります。ルート クラスの静的インスタンス変数を使用して、時間を保持できます。

于 2012-12-07T08:28:41.177 に答える