我写了情侣排序算法。我想比较他们的排序时间,至少是差不多。但在第一次循环之后,除了 StoogeSort 之外,所有排序时间都减少了。我认为可以在后台进行一些优化,但我应该考虑哪种措施?第一个还是其他?为什么会发生这种情况?
public static void main(String[] args) {
RandomNumber rn = new RandomNumber();
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("Enter the input size.");
int n = sc.nextInt();
int[] experimentalArray = rn.experimentalArrayGenerator(n);
Stopwatch sw1 = new Stopwatch();
StoogeSort ss = new StoogeSort(experimentalArray.clone());
System.out.println("StoogeSort : " + sw1.elapsedTime() + " µs");
Stopwatch sw2 = new Stopwatch();
RadixSort rs = new RadixSort(experimentalArray.clone());
System.out.println("RadixSort : " + sw2.elapsedTime() + " µs");
Stopwatch sw3 = new Stopwatch();
ShakerSort shs = new ShakerSort(experimentalArray.clone());
System.out.println("ShakerSort : " + sw3.elapsedTime() + " µs");
Stopwatch sw4 = new Stopwatch();
MaximumSubarray ms = new MaximumSubarray();
int a = ms.maxSubArraySum(experimentalArray.clone());
System.out.println("MaximumSubarray : " + sw4.elapsedTime() + " µs");
System.out.println("------------------------------------------------------");
}
}
4次循环后的输出:
微基准测试是一个复杂的问题,因为许多因素都会影响执行时间(例如 Jon Skeet 在评论中指出的即时编译和垃圾收集)。
你应该阅读这个文件如果您想了解应该如何进行微基准测试,作者是 Peter Sestoft。
此处引用文档的摘要,因为该文档是外部资源:
有时人们想要测量软件的速度,例如
衡量解决问题的新方法是否比旧方法更快
一。进行此类时间测量和微基准测试需要
相当小心,尤其是在 Java 等托管平台上
虚拟机和微软的公共语言基础设施(.NET),
否则结果可能是任意的和具有误导性的。
这里我们给一些
关于运行微基准测试的建议,特别是对于托管
平台。大多数示例都是用 Java 编写的,但建议适用于任何
在托管平台上执行的语言,包括 Scala、C# 和 F#。
该版本使用Java函数式接口,需要Java 8。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)