【发布时间】:2017-03-24 15:29:00
【问题描述】:
我写了一对排序算法。我想比较他们的排序时间,至少差不多。但是在第一次循环之后,除了 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 次循环后的输出:
【问题讨论】:
-
对随机数数组进行排序几乎不会花费相同的时间。
-
但这很奇怪。只是第一个与众不同。
-
以数组 [1,2,3,4,5,6,7,8,9,10] 为例。算法需要多少次迭代才能对其进行排序?然后考虑数组 [10,5,3,7,2,8,1,9,6,4]。需要同样的时间吗?
-
除此之外,第一个执行路径将涉及不同的 JITting,很可能是不同的 GC 体验等。
标签: java sorting time-complexity