【发布时间】:2022-01-26 17:37:06
【问题描述】:
排序算法变得更快(在 Java 中)?!
我已经实现了一些排序算法和一个 getNanoTime 方法,它给出了这个排序算法的 NanoTime。
我想计算一个平均值。我意识到平均时间与一次测试算法的时间不同。
我以为我做错了什么。
但后来我找到了。
做的时候:
int length = 5000;
int bereich = 1000;
long time;
time = Bubblesort.getNanoTime(length, bereich);
System.out.println("BUBBLESORT: " + (1.0 * time / 1_000_000) + " ms");
time = Insertionsort.getNanoTime(length, bereich);
System.out.println("INSERTIONSORT: " + (1.0 * time / 1_000_000) + " ms");
time = Mergesort.getNanoTime(length, bereich);
System.out.println("MERGESORT: " + (1.0 * time / 1_000_000) + " ms");
time = Quicksort.getNanoTime(length, bereich);
System.out.println("QUICKSORT: " + (1.0 * time / 1_000_000) + " ms");
time = Selectionsort.getNanoTime(length, bereich);
System.out.println("SELECTIONSORT: " + (1.0 * time / 1_000_000) + " ms");
我明白了:
冒泡排序:75.7835 毫秒
插入排序:27.250875 毫秒
合并:17.450083 毫秒
快速排序:7.092709 毫秒
选择排序:967.638792 毫秒
但是在做例子时:
for (int i = 0; i < 20; i++) {
System.out.println(1.0 * Bubblesort.getNanoTime(5000, 1000) / 1_000_000);
}
我明白了:
85.473625 毫秒
62.681959 毫秒
68.866542 毫秒
48.737333 毫秒
47.402708 毫秒
47.368708 毫秒
47.567792 毫秒
47.018042 毫秒
45.1795 毫秒
47.871416 毫秒
49.570208 毫秒
50.285875 毫秒
56.37975 毫秒
50.342917 毫秒
50.262833 毫秒
50.036959 毫秒
50.286542 毫秒
51.752708 毫秒
50.342458 毫秒
51.511541 毫秒
第一次总是高(这里是第一次85毫秒),第一次之后的次数较低。 所以,我认为,机器学习,它变得更快
可以吗? 你知道更多吗?
【问题讨论】:
-
这称为 JIT(及时)优化。搜索该词以获取您需要的所有信息。
标签: java algorithm sorting runtime