在Java6中,quicksort和mergesort分别在Arrays#sort
中用于原始数组和对象数组。在Java7中,它们都已更改为DualPivotQuicksort和Timsort。
在新的快速排序的来源中,以下注释出现在几个地方(例如354行):
/*
* Here and below we use "a[i] = b; i++;" instead
* of "a[i++] = b;" due to performance issue.
*/
这是一个性能问题吗?编译器不会将这些简化为同一件事吗?
更广泛地说,调查自己的最佳策略是什么?我可以运行基准测试,但对分析已编译代码中的任何差异会更感兴趣。但是,我不知道要使用什么工具等。
这只是一般问题的答案。
您可以查看字节码并尝试了解它们之间的差异。也就是说,您可以使用这两者编写一个简单的示例a[i] = b; i++;
,a[i++] = b;
然后看看有什么区别。
显示字节码的最简单方法是javap
程序(应该包含在JDK中)。使用编译代码javac SomeFile.java
并在代码上运行javap
:(javap -c SomeFile
-c开关告诉javap输出文件中每个方法的字节码)。
如果使用的是Eclipse,你也可以尝试这一个。
主要内容:src/runoob/heap/HeapSort.java 文件代码:上一节的堆排序,我们开辟了额外的空间进行构造堆和对堆进行排序。这一小节,我们进行优化,使用原地堆排序。 对于一个最大堆,首先将开始位置数据和数组末尾数值进行交换,那么数组末尾就是最大元素,然后再对W元素进行 shift down 操作,重新生成最大堆,然后将新生成的最大数和整个数组倒数第二位置进行交换,此时到处第二位置就是倒数第二大数据,这个过程以此类推。 整个过程可以用如下图表示: Java 实
我正在尝试优化这个查询,该查询通过字段(第1个)和字段(第2个)对进行排序。没有第一个字段查询需要大约0.250秒,但有了它需要大约2.500秒(意味着慢了10倍,可怕)。有什么建议吗? 注意: -使用InnoDB(MySQL 5.7.19) -主要是表上的 -字段同时被索引和 解释结果: 更新^^ 信誉规定:一个帖子,多少(n=信誉)天可以显示在列表的顶部。 实际上,我试图给一些帖子的声誉,可以
问题内容: [http://jsperf.com/optimized-mergesort-versus- quicksort][1] 为什么这个半缓冲区合并排序的工作速度与quicksort一样快? QuickSort是: 就地虽然会占用递归(堆栈空间) 缓存友好 这一半缓冲区合并排序: 使用Buffer进行合并。 使用递归。 进行较少的比较。 我的问题是,在这种情况下,为什么半缓冲区合并排序与Q
问题内容: 我想知道还有什么可以优化冒泡排序的方法,以便即使在第一次通过之后也可以忽略已经排序的元素。 我们观察到[4,5,6]已经按顺序排列,如何修改我的代码,以便在下一遍中忽略这3个元素?(这意味着排序会更有效?)您是否建议使用递归方法? 谢谢你的时间! 问题答案: 首先,您具有越界访问权限: 因为,所以循环条件应该是。 但是,在Bubble排序中,您知道经过传递后,最大的元素将在数组的最后一
我有一个,名为,其中包含类型的对象。 您可以在所有车辆上调用该方法。 我要做的是排序,这样车辆被赋予更高的优先级,并被放在队列的前面。 我假设我必须在这里使用一个比较器,但不知道怎么做。
Listner代码 请帮助我解决问题,因为这样的循环每天都会发生。完全读取topic1消息,然后从Topic2读取消息。