【发布时间】:2014-09-18 07:57:57
【问题描述】:
我想在qsort 的帮助下对一个包含 20 字节(它不是结构)二进制记录的大文件进行排序。文件中有 800 000 000 条记录。
我有两个问题:
-
在
qsort的比较函数中对 20 字节记录进行排序的最佳方法是什么?int compare(const void *a, const void *b) 以及如何简单地对 800 000 000 条记录进行排序?我不能把它全部放在记忆中..
【问题讨论】:
-
800000000 条记录,每条 20 字节?
-
为什么要快速排序?使用外部排序(基于归并排序),或使用多处理排序的一些 Terra-sort 现有实现。
-
> 为什么要快速排序?只是我不知道其他解决方案..
-
“不能把它全部放在内存中”如果你有一个 32 位进程,这可能是正确的,但是在一个具有大内存的 64 位系统中,它应该非常适合。如果您不想加载到内存中,那么对“文件”使用某种排序方法可能是最好的方法。
-
如前所述,外部排序通常是某种类型的合并排序。如果你读/写大量数据,比如一次 10MB 到 100MB,那么随机访问开销会减少,你可以使用更大的 k 路合并排序,k 等于 8 或 16,具体取决于你有多少内存有空。
标签: c++ sorting record binary-data qsort