1

こんにちは私はJAVAでバブルソートアプリケーションを書きました。アプリケーションは完全に機能しており、十分な出力が得られますが、平均的な時間の出力は得られません。

これが私のコードです:

public class BubbleSort {
static double bestTime = 10000000, worstTime = 0;
public static void main(String[] args) {
    int BubArray[] = new int[]{**#interger values are placed in here#**};
         System.out.println("Unsorted List Before Bubble Sort");
         for(int a = 0; a < BubArray.length; a++){
         System.out.print(BubArray[a] + " ");
            }

        System.out.println("\n Bubble Sort Execution ...");

                    for(int i=0; i<10000;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);
    if (timeTaken > 0)
    {
        worstTime = timeTaken;
    }
    else if (timeTaken < bestTime)
    {
        bestTime = timeTaken;
    }

    System.out.println(n + "," + timeTaken);

}
}

しかし、a)それぞれの平均時間を取得する方法と、グラフにベスト、アベレージ、ワーストケースの結果をプロットする方法がわかりません。

出力例は次のとおりです。

Unsorted List Before Bubble Sort
#Integers Values of Unsorted List#

Bubble Sort Execution ... **#(execution number, time in nanoseconds)#**
0,6336584.0
1,5063668.0
2,3364580.0
3,3373289.0
4,3755912.0
5,3383866.0
....
9995,3431772.0
9996,3368312.0
9997,3743469.0
9998,4639362.0
9999,3433638.0

Moves Taken for Sort : 499500 Moves.
BestTime: 1.0E7 WorstTime: 3433638.0

またbubbleSortTimeTaken()、使用される整数の数(100、1000、10000、100000、1000000)がテストされているかどうかに関係なく、プログラムの実行ごとに1.0E7が与えられるため、関数が正しく機能するかどうかもわかりません。プロットする平均、最良、最悪のケースを見つけたいと思います。

助けていただければ幸いです、ありがとう。

4

2 に答える 2

1
   if (timeTaken > 0)   // <- PROBLEM, Shouldn't be zero
    {
        worstTime = timeTaken;
    }
    else if (timeTaken < bestTime) //<- PROBLEM! , the 2 comparisons are unrelated
    {
        bestTime = timeTaken;
    }

すぐそこに。ほとんどの場合timeTaken、> 0の場合、else ifは実行されません。
したがって、bestTime更新されることはなく、元の値(1E7)を保持します。

これを修正するには、関数を次のように変更する必要があります。

public static void bubbleSortTimeTaken(int[] BubArray, int n) 
{
long startTime = System.nanoTime();
    bubbleSort(BubArray);   
    double timeTaken = (System.nanoTime() - startTime);
    if (timeTaken > worstTime)
    {
        worstTime = timeTaken;
    }
    if (timeTaken < bestTime)
    {
        bestTime = timeTaken;
    }

    System.out.println(n + "," + timeTaken);

}
}

私も可能な修正を追加したことに注意してくださいworstTime

于 2012-12-09T18:22:04.183 に答える
1
 if (timeTaken > 0)
{
    worstTime = timeTaken;
}

これは

 if (timeTaken > worstTime)
{
    worstTime = timeTaken;
}

そうしないと、これを適切に設定できません。これは、bestTimeが常に10e7である理由を説明しています。

平均を見つけるには、特定の回数だけそれを実行し、すべての時間を記録してから、それらを加算して、実行された回数で除算します。

于 2012-12-09T18:22:07.547 に答える