Java 使用System.nanoTime()为不同长度的插入计时
我有一些Java代码,用于计算平均10次插入排序的时间。它对同一数组进行排序,但最多可排序100个字、200个字等,直到数组的完整长度。下面的代码分别代表100个和200个单词,但看起来都一样,只是变量发生了变化 然而,下一次的平均时间似乎越来越短。例如:100个单词9658233ns,200个单词4273459ns,300个单词3716726ns,400个单词2965091ns,459个单词2842528ns。但是,如果我颠倒顺序,首先对整个数组进行排序,最后对100个单词的数组进行排序,则对整个数组进行排序所需的时间最长,对100个单词的数组进行排序所需的时间最短 使用不同的方法对插入排序计时是否会导致更一致的结果Java 使用System.nanoTime()为不同长度的插入计时,java,arrays,timing,insertion-sort,nanotime,Java,Arrays,Timing,Insertion Sort,Nanotime,我有一些Java代码,用于计算平均10次插入排序的时间。它对同一数组进行排序,但最多可排序100个字、200个字等,直到数组的完整长度。下面的代码分别代表100个和200个单词,但看起来都一样,只是变量发生了变化 然而,下一次的平均时间似乎越来越短。例如:100个单词9658233ns,200个单词4273459ns,300个单词3716726ns,400个单词2965091ns,459个单词2842528ns。但是,如果我颠倒顺序,首先对整个数组进行排序,最后对100个单词的数组进行排序,则对
long i1AverageTime = 0L;
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
insertionSort(myArray, 100);
long end = System.nanoTime();
long timeTaken = end - start;
i1AverageTime += timeTaken;
}
i1AverageTime /= 10;
long i2AverageTime = 0L;
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
insertionSort(myArray, 200);
long end = System.nanoTime();
long timeTaken = end - start;
i2AverageTime += timeTaken;
}
i2AverageTime /= 10;
使用计时方法进行算法分析确实是一种很难判断算法性能的方法,尤其是在笔记本电脑或个人或学校使用的机器上 您可能会遇到不稳定的时间,原因有很多: 您的计算机的处理速度可能每运行一秒钟都在变化。像web浏览器、防病毒软件和其他后台处理程序都会影响您的处理能力,从而影响您运行算法的能力。 记忆也是如此。您的RAM使用率和内存可用性不断变化,而且非常不稳定,因此使用它来衡量性能并不是一个安全的指标。 衡量算法性能的更准确的方法是分析算法的运行时复杂性与已知复杂性(通常在^2上或^2上) 请看Microbenchmark套件。