java - 选择一个好的排序算法

标签 java algorithm sorting

<分区>

Java 应用程序大部分时间都在对某些键进行排序并删除重复项。

因此选择合适的排序算法是强制性的。

键是整数(大约 256 位,但不一定),数组大小在 1000 到 100000 个键之间。

输入数组由连续的键组组成。这些组已经排序并且很小(大约 10 个键)。

数组示例(3 组,32 位键):

0x01000000
0x01010000
0x01010100
0x01010101

0x01000000
0x01010000
0x01010100
0x01010102

0x01000000
0x01020000
0x01020200
0x01020203

排序和删除重复项后:

0x01000000
0x01010000
0x01010100
0x01010101
0x01010102
0x01020000
0x01020200
0x01020203

有困难吗?任何想法 ?有链接吗?

谢谢

PS:在查看了排序算法(包括合并排序、基数排序、qui 的许多变体)之后...我继续围绕 HashMap 进行挖掘。

PPS:最后我 fork 了 Java 遗留合并排序,添加了过滤和排序组的概念。它提供了很大的加速。

最佳答案

合并排序(http://en.wikipedia.org/wiki/Merge_sort)

由于您的输入数据已预先排序,因此您有一个良好的开端。您可以将每个列表中的第一个值输入到 PriorityQueue 中,取出最少的值,然后将该列表中的下一个值添加到队列中。重复。进行一些检查以到达终点。 :-)

我确定有更完整的详细信息的 SO 答案。

更多链接:

http://www.cs.washington.edu/education/courses/cse373/06sp/handouts/lecture08.pdf

Algorithm for N-way merge

而且,我自己的回答非常完整的 Java 代码:

Merging multiple sorted csv files with complex comparison

关于java - 选择一个好的排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685782/

相关文章:

java - 如何将 map 转换为对象

java - 将此 HQL 转换为条件

algorithm - 为有向图中的所有顶点查找两步邻居的高效算法

java - 为什么 QuickSort 使用 O(log(n)) 额外空间?

ruby-on-rails - 如何对具有反向排序方向的 ruby​​ 数组应用二次排序?

java - ScheduledExecutorService#scheduleAtFixedRate 不起作用

java - 将 jboss.xml 迁移到 jboss-ejb3.xml

python - 使用 PCA 计算原始数据集和转换后的数据集之间丢失的数据

Java:使用 Java 8 API 对非连续字符串字符的子集进行排序的更快方法是什么

jquery - jQuery 插件 asmSelect 不保留排序顺序