如何在C中对非常大的数组进行排序

hip*_*ail 0 c arrays sorting qsort large-data

我想long long在C中按四百万s 的顺序排序.通常我只是malloc()一个缓冲区用作数组并调用qsort()但是四百万*8字节是一大块连续内存.

最简单的方法是什么?为此,我对速度感到轻松.我不想使用任何库,结果将需要在Windows和Linux下的适度上网本上运行.

Gar*_*han 11

只需分配缓冲区并调用即可qsort.即使在适度的上网本上,如今32MB也不是那么大.

如果你真的必须拆分它:对较小的块进行排序,将它们写入文件,然后合并它们(合并对每个被合并的东西进行一次线性传递).但是,真的,不要.只是排序吧.

(关于Knuth第2卷中的排序和合并方法有一个很好的讨论,它被称为"外部排序".当Knuth写这篇文章时,外部数据会出现在磁带上,但原理并不是很好与光盘不同:你仍然希望你的I/O尽可能顺序.与SSD的权衡有点不同.)

  • +1用于引用Knuth.那_always_工作 (3认同)