【发布时间】:2015-10-08 13:17:50
【问题描述】:
需要对大量无法保存到内存中的整数进行排序。想知道合并排序是否是正确的方法?我的解决方案是这样的,
- 对每 5% 的整数使用基于内存的排序,这可以保存在内存中,使用在内存中高效执行的快速排序;
- 每20个块排序后,使用归并排序对20个列表进行排序,对于归并排序,我只需要将每个文件的一部分加载到内存中,如果当前部分在同一列表中,则加载同一列表的下一部分完全排序为最终结果。由于 20 个列表中的每一个都是排序的,我只需要从头到尾顺序加载部分块,因此内存是负担得起的。
我不确定这是否是大量整数排序的正确方法?
【问题讨论】:
-
可能需要研究的是外部排序en.wikipedia.org/wiki/External_sorting
-
是的,这是正确的方法。我已经用过很多次了。除了我多次进行 2 路合并,而不是 20 路合并。
-
是的,你描述的正是外部归并排序算法。
-
我不确定 20-way 是否会更快。您对数据的传递次数较少,但比较过程要复杂得多。鉴于您收到的答案,我猜有人已经对此进行了研究并确定 16 路是最佳的,但我无法确认。
-
它们是什么整数?常规 32 位整数?