200-300位整数的最快整数排序实现?

时间:2011-08-04 01:37:57

标签: c++ c sorting integer

200-300位整数的最快整数排序实现是什么?精确的int大小是固定的;我有这样的整数最多2千兆字节(全部在RAM中)。

我听说可以在O(n log log M)或甚至O(n sqrt(log log M))时间平均排序这样的集合,其中n是整数,M是最大整数。内存使用量有限(我可能会额外使用0.5-1 GB)。排序可以就地进行; in可能不稳定(重新订购重复)。

是否有这种排序方法的C / C ++实现,例如汉和Thorup(2002)?

4 个答案:

答案 0 :(得分:3)

Radix Sort可用于使用固定大小的键对数据进行排序。由于这种情况并不常见,因此对该技术的讨论不多,但当密钥大小被考虑在内时,它可以是O(n)。

答案 1 :(得分:0)

如果内存使用真的有限。我将每个字节分开并将它们存储到从最重要字节到最低有效字节的特里数据结构中。如果按排序顺序插入字节,则可以迭代trie并对所有数据进行排序。

答案 2 :(得分:0)

签名排序很好,大字长,'O(n lg lg n)'消耗时间复杂度,但是对于小字大小,你可以使用von Emde Boas排序获得相同的复杂性。最近,Han和Thorup发布了更快的排序算法,预计时间复杂度为'O(n sqrt(lg lg n))。我不确定你是否可以在网上找到这些算法的实现,但是麻省理工学院和哈佛大学可能会有一些很棒的文章和讲座。

答案 3 :(得分:-1)

我认为最合理的做法是创建一个指向bigints的指针数组,并对指针数组进行排序。我会建议某种模板化的快速排序,具有智能比较功能。

比较函数应该能够通过查看最重要的4个字节来决定大部分时间。如果它们不匹配,则确定比较。如果它们匹配,则查看接下来的4个字节,直到int结束。

我猜测数据范围可能足够大,基数排序是不切实际的。如果您的数据是随机的,并且具有超过大多数非基数排序的缓存性能,则快速排序通常更快。