私は標準的なクイックソートアルゴリズムを実装し、いくつかの実行でそれをテストし、実行時間を配列に格納しました。System.nanoTime()は、QuickSortを何回実行しても連続的に減少する時間を返します。
int max = 100;
int runs = 1000;
int[] arr = new int[max];
Long[] times = new Long[runs];
while(n < runs){
for(int i =0 ; i<max; i++){
arr[i]=(int)(Math.random()*99);
//arr[i] = i;
}
Long start = System.nanoTime();
quicksortsimple(arr,0,max-1);
Long now = System.nanoTime();
times[n++] = now-start;
}
次に何が起こるかは出力「回」配列は、はるかに大きな値で開始し、徐々に少なくと100番目のインデックス(クイックソートの100回の実行)した後、それはビット一定になるが、この値が1割未満であることです最初の2-3値の n = 1000で返される平均値は、プログラムの複数のルーンで同じです。
すでにソートされている(コメントアウトされた行として)配列を初期化しても、より平均的な時間がかかるはずですが、同じことが起こります。
しかし、これは、同じアレイ上の同じアルゴリズムに対してこのようなさまざまな実行時間を返してはなりません。どのような場合でも、減少するパターンは何を示していますか?
https://stackoverflow.com/a/11227902/4467208 –
ベンチマークに欠陥があることを示しています。https://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-ベンチマーク・イン・ジャンク – Kayaman
'System.nanoTime()'によって返された数値がすべての反復で小さくなるわけではないので(時間を移動する必要はありません)、考えられる可能性が高いようです。彼らが一定の値で来るときにのみ測定値を使うことを提案します... – mumpitz