Я хочу протестировать время выполнения некоторого алгоритма сортировки со следующим кодом
int n = 2000;
for(int i=0; i<10; i++){
n *= 2;
init(array, n); // initializes array with n elements
long startTime = System.nanoTime();
sort(array;
long elapsedTime = System.nanoTime()-startTime;
System.out.println("Size: "+n+"\t\tTime: "+elapsedTime/1000000+"(ms)");
}
Выход
Size: 4000 Time: 0(ms)
Size: 8000 Time: 0(ms)
Size: 16000 Time: 0(ms)
Size: 32000 Time: 0(ms)
Size: 64000 Time: 0(ms)
Size: 128000 Time: 0(ms)
Size: 256000 Time: 0(ms)
Size: 512000 Time: 0(ms)
Size: 1024000 Time: 0(ms)
Size: 2048000 Time: 0(ms)
Проблема не в алгоритме, он правильно сортирует массивы, а для работы с большими массивами требуется заметное время. Этот пример занял около 10 секунд. Я думаю, что использовал nanoTime() так же, как описано в документации по Java. Я искал ответ на эту проблему, и кажется, что люди сталкивались с подобной проблемой. Например, здесь Есть ли секундомер в Java?. Однако я не смог найти ответ, как решить проблему. Были предложения использовать StopWatch apache, но, насколько я понял, он использует аналогичные вызовы nanoTime(). Итак, как решить эту проблему? Если это имеет значение, я запускаю код в Windows 7 с jre 1.8.0_31. Спасибо
init
? - person   schedule 02.06.2015sort(array;
вообще компилируется? ;) - person Alejandro   schedule 02.06.2015array = new int[size]
. Но в java аргументы передаются по значению, так что это не повлияло на мой исходный массив вне метода. - person Andy   schedule 02.06.2015