[英]Should I use java collection sort() or implement my own?
我有一个数组,需要按升序对值进行排序。 数组内的可能值在1到9之间,会有很多重复值。 (仅供参考:我正在研究数独求解器,并尝试使用回溯以最小的可能性从盒子开始解决难题)
我的第一个想法是使用Shell Sort。
我做了一些查找,发现java集合使用了“修改的mergesort”(如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。
因此,我想知道如果实现自己的排序算法,性能差异是否会明显。
如果只有9个可能的值,则可能需要对sort进行计数 -基本思想是:
创建一个大小为9的计数数组。
遍历数组并为每个元素递增计数数组中的相应索引。
遍历count数组并重新创建原始数组。
它的运行时间为O(n + 9) = O(n)
,其中-标准API排序的运行时间为O(n log n)
。
因此,是的,这很有可能比Java API使用的基于比较的标准排序要快,但是只有一个基准可以肯定地告诉您(它可能取决于数据的大小)。
通常,我建议您首先尝试使用标准API sort ,看看它是否足够快-实际上,它只有1行代码(除非您必须定义比较函数),而对于创建自己的排序功能,并在确保其通用性的同时付出了很多努力。
如果那还不够快,请尝试找到并实施一种适合您的数据的排序方式。 例如:
正如评论中指出的那样, Arrays.parallelSort
(来自Java 8)也是一个值得考虑的选项,因为它对工作进行了多线程处理(哪种sort
不起作用,并且肯定要花很多精力做自己的事情……)有效率的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.