合并具有大量整数的排序

时间:2015-10-08 00:27:33

标签: algorithm sorting

需要对大量无法保存到内存中的整数进行排序。想知道合并排序是否正确?我这样的解决方案,

  1. 使用基于内存的排序,每个5%的整数可以保存到内存中,使用快速排序,在内存中有效执行;
  2. 在对每20个块进行排序后,使用合并排序对20个列表进行排序,对于合并排序,我只需要将每个文件的一部分加载到内存中,如果同一列表的当前部分,则加载相同列表的下一部分完全分为最终结果。由于20个列表中的每个列表都已排序,我只需要按顺序从头到尾加载部分块,因此内存价格实惠。
  3. 我不确定这是否是进行大量整数排序的正确方法?

2 个答案:

答案 0 :(得分:2)

由于,

  

它们是整数,大多数是1-100

您需要的只是Counting Sort

实施起来非常简单。

  1. 创建一个名为HashMap<int, int>的100个整数(或intCounts)数组(如果您认为32位可以溢出则采用64位整数)
  2. 逐个阅读您需要排序的整数
  3. 要对每个inputInteger进行排序,只需执行intCounts[inputInteger]++
  4. 即可
  5. 读完所有整数后,intCounts[i]会告诉您在大整数集中看到整数i的次数
  6. 只需将intCounts从最低索引迭代到最高索引
  7. 回复i总共intCounts[i]
  8. 您现在已经回写了所有输入整数的排序列表。

答案 1 :(得分:1)

GNU排序程序(与其Unix前身一样)使用内存中排序,然后根据需要进行多次16向合并。请参阅此处的代码以了解更多信息:

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/sort.c#n306