使用O(N log N)读取和O(N)写入对int进行外部排序

时间:2009-08-08 12:36:11

标签: c++ sorting external

我对算法感兴趣,我应该用它来满足int读取和O(N log N)写入O(N)的外部排序要求

3 个答案:

答案 0 :(得分:4)

如果您正在使用针对该类型排序的算法(其中数据不能同时整合到核心中),那么我的解决方案来自于“革命”的最早期,当时高端机器的数量较少记忆比大多数现代计算器。

我还没有计算出大O属性,但我认为它将是O(n)读取,O(n log n)排序阶段(取决于所选择的排序方法)和O(n)写入。 / p>

假设您的数据集有一百万个元素,一次只能在内存中容纳100,000个。这就是我要做的事情:

  • 读入前100,000个,对它们进行排序并将该排序列表重新编写。
  • 为每组100,000人执行此操作。
  • 对10个组进行合并操作。

换句话说,一旦您的10个组在组内排序,请从每个组中抓取第一个条目。

然后将输出文件中10个中最低的一个(这是整个百万中最低的一个)写入输出文件中,并从该组中读取下一个。

然后继续选择10中的最低位,将其写出并从同一组中替换它。这样,最终输出就是一百万个条目的整个排序列表。

答案 1 :(得分:3)

查看external merge sort算法。

答案 2 :(得分:2)

试试这个页面:Sorting Algorithms。除了展示几种算法的精美动画外,它还解释了它们的工作原理及其复杂性。