繁体   English   中英

我应该使用Java集合sort()还是自己实现?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM