我想在qsort
的帮助下对包含20字节(它不是结构)二进制记录的大文件进行排序。文件中有8亿条记录。
我有两个问题:
在qsort
的比较函数中对20字节记录进行排序的最佳方法是什么?
int compare(const void *a, const void *b)
以及如何使用8亿条记录进行排序?我不能把它全部放在记忆中..
答案 0 :(得分:0)
正如许多评论者所提到的,对于external sorting algorithm来说,这看起来非常棒,这是一种排序算法,专门针对您无法将所有对象同时排入内存的情况而设计的。许多排序算法可以适用于此设置,例如快速排序,存储桶排序和合并排序。如果您想要一个相对简单的选项,请考虑使用k-way外部mergesort:将数据拆分为多个范围,使每个范围适合内存,对内存中的每个范围进行排序,并将结果写回磁盘。然后,在这些范围上进行k-way合并:打开每个文件进行读取,一次读取每个文件的一个大块,并对这些块使用正常的k-way合并操作。每当你耗尽一个块中的所有元素时,只需从文件中读取另一个块。