我对算法感兴趣,我应该用它来满足int
读取和O(N log N)
写入O(N)
的外部排序要求
答案 0 :(得分:4)
如果您正在使用针对该类型排序的算法(其中数据不能同时整合到核心中),那么我的解决方案来自于“革命”的最早期,当时高端机器的数量较少记忆比大多数现代计算器。
我还没有计算出大O属性,但我认为它将是O(n)读取,O(n log n)排序阶段(取决于所选择的排序方法)和O(n)写入。 / p>
假设您的数据集有一百万个元素,一次只能在内存中容纳100,000个。这就是我要做的事情:
换句话说,一旦您的10个组在组内排序,请从每个组中抓取第一个条目。
然后将输出文件中10个中最低的一个(这是整个百万中最低的一个)写入输出文件中,并从该组中读取下一个。
然后继续选择10中的最低位,将其写出并从同一组中替换它。这样,最终输出就是一百万个条目的整个排序列表。
答案 1 :(得分:3)
查看external merge sort算法。
答案 2 :(得分:2)
试试这个页面:Sorting Algorithms。除了展示几种算法的精美动画外,它还解释了它们的工作原理及其复杂性。