使用QSORT对大型二进制固定长度记录进行排序

时间:2014-09-18 07:57:58

标签: c++ sorting record binary-data qsort

我想在qsort的帮助下对包含20字节(它不是结构)二进制记录的大文件进行排序。文件中有8亿条记录。

我有两个问题:

  • qsort的比较函数中对20字节记录进行排序的最佳方法是什么?

    int compare(const void *a, const void *b)
    
  • 以及如何使用8亿条记录进行排序?我不能把它全部放在记忆中..

1 个答案:

答案 0 :(得分:0)

正如许多评论者所提到的,对于external sorting algorithm来说,这看起来非常棒,这是一种排序算法,专门针对您无法将所有对象同时排入内存的情况而设计的。许多排序算法可以适用于此设置,例如快速排序,存储桶排序和合并排序。如果您想要一个相对简单的选项,请考虑使用k-way外部mergesort:将数据拆分为多个范围,使每个范围适合内存,对内存中的每个范围进行排序,并将结果写回磁盘。然后,在这些范围上进行k-way合并:打开每个文件进行读取,一次读取每个文件的一个大块,并对这些块使用正常的k-way合并操作。每当你耗尽一个块中的所有元素时,只需从文件中读取另一个块。