测试各种排序算法的速度

时间:2017-12-08 12:23:37

标签: java algorithm performance sorting microbenchmark

我刚刚开始学习各种算法,我正在尝试编写一个测试算法之间速度的程序,并输出每个算法运行到屏幕所需的时间。正如我所设置的那样,每个算法都是RunnableAlgorithm抽象类的子类,它为算法的每次迭代创建相同参数的新数组。

然而,随着算法的每次迭代,它似乎运行得更快!这是输出的片段 - 我已经尝试了几次,并且它运行它的次数越来越快。

SelectionSort warmup .. 45695528 ns
SelectionSort: 996415 ns
SelectionSort: 1044200 ns
SelectionSort: 1260648 ns
SelectionSort: 774839 ns
SelectionSort: 738320 ns
SelectionSort: 337446 ns

它有一个在超类ctor中调用的“预热”方法(根据我的理解)应该加载所有使用的类。

预热会调用稍后调用的所有类,包括DecimalFormat,Random,System(用于System.nanoTime()System.out),以及多次运行算法。

 SelectionSort s = new SelectionSort();
   for (int i = 0; i < 6; i++) {
     s.setTime();
     s.algorithmAverage();
     s.printTime();
 }

setTime()设置一个变量:

beginTime = System.nanoTime(); 

和printTime()是:

System.out.println(this.getClass().getName() + ": " + new
    DecimalFormat(DECIMAL).format( System.nanoTime() - beginTime)
    + " ns");

algorithmAverage()运行算法10次,这是正在计时的。任何人都可以帮助我理解它加速的原因吗? JVM是否优化了要运行的代码,因为它经常被调用?有没有更好,更一致的方法来测试System.nanoTime()以外的算法速度,这似乎是相当不可靠的?

先谢谢你!

0 个答案:

没有答案