【发布时间】:2011-10-19 14:20:25
【问题描述】:
对于 200-300 位大小的整数,最快的整数排序实现是什么?确切的 int 大小是固定的;我有多达 2 GB 的此类整数(全部在 RAM 中)。
我听说可以在 O(n log log M) 甚至 O(n sqrt(log log M)) 时间对这样的集合进行平均排序,其中 n 是整数个数,M 是最大整数.内存使用是有限的(我可能会额外使用 0.5-1 GB)。分拣可以就地进行; in 可能不稳定(重新排序重复)。
是否有这种排序方法的 C/C++ 实现,例如Han & Thorup (2002)?
【问题讨论】:
-
整数是随机的吗?有没有可能有帮助的内部模式?这是两个问题:高效的大整数比较和快速排序功能。快速排序算法有很多评价……你需要找到一个快速的比较。
-
它们不是随机的,而是相当大的。我想测试更快的基于签名的方法或基于 van Emde Boas 树的方法,例如“Han&Thorup 2002”。我有,但我想得到完整的实施。
-
一个 300 位大小的整数? Let me googol it for you
-
也许您还应该担心您的排序算法会占用多少内存。有些算法在原地运行良好,有些则不行。
-
我打赌 MSD 递归基数排序从内存使用和缓存位置(我认为对于数据量非常重要)的角度来看是最有效的。 en.wikipedia.org/wiki/…