如何对包含很长项目列表的文件进行排序?

时间:2010-06-16 11:52:28

标签: c++ sorting

我有一个包含很长项目列表的文本文件。所以我想按字母顺序对它们进行排序,但我不想将所有文件加载到内存(RAM)中。

我尝试将文件的所有内容加载到数组中,并按照我正常的方式对它们进行排序。但系统抱怨没有太多记忆!!

谢谢, 穆罕默德

4 个答案:

答案 0 :(得分:7)

您需要阅读external sorting。基本方法是使用某种分而治之的例程,如merge sort,您可以在其中读取和排序文件的一部分,然后读取和排序文件的另一部分等,当您到达时最后你将已排序的部分合并在一起。

答案 1 :(得分:4)

也许STXXL(超大型数据集的标准模板库)有帮助。

STXXL提供external sorting等。

答案 2 :(得分:0)

您不必将整个文件保存在内存中。如果这是一项您不必经常执行的任务,您可以编写一个非常慢的应用程序。像这样(伪):

vector<int> linesProcessed;
for (int i = 0; i < lineCount; i++)
{
   if (linesProcessed contains i) continue;
   string alphabeticalFirstLine;
   int lineIndex;
   foreach line in oldFile
   {
       if (line is before alphabeticalFirstLine)
       {
            alphabeticalFirstLine = line;
            lineIndex = i;
       }
   }
   write alphabeticalFirstLine to newFile;
   vector.add(lineIndex);
}
clear vector;
delete oldFile;
rename newFile to oldFile;

答案 3 :(得分:0)

如果您使用的是类似unix的操作系统,则可以使用sort命令。它将关注内存消耗。 例如,“cat large_file | sort”就可以完成这项工作。

或者您可以从库中编写自己的/使用外部排序。告诉我们您使用的是哪种语言,也许有人会告诉您使用的确切库。