代码之家  ›  专栏  ›  技术社区  ›  malhobayyeb

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

  •  7
  • malhobayyeb  · 技术社区  · 14 年前

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

    我尝试将文件的所有内容加载到一个数组中,然后像往常一样对它们进行排序。但系统抱怨内存不足!!

    谢谢, 穆罕默德

    4 回复  |  直到 14 年前
        1
  •  7
  •   Jason S    14 年前

    你需要继续读下去 external sorting . 基本的方法是使用一些分而治之的方法,比如 merge sort ,在这里读取和排序文件的一部分,然后读取和排序文件的另一部分,等等。当到达末尾时,将排序的部分合并在一起。

        2
  •  4
  •   stephan    14 年前

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

    STXXL报价 external sorting 除此之外。

        3
  •  0
  •   Martijn Courteaux    14 年前

    您不必将整个文件保存在内存中。如果这是一个你不必经常做的任务,你可以写一个应用程序,它的排序非常慢。类似这样(伪):

    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;
    
        4
  •  0
  •   Klark    14 年前

    如果您使用的是类似于Unix的操作系统,那么可以使用sort命令。它将考虑内存消耗。 例如,“cat large_file_sort”这样的例子就可以完成这项工作。

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