Если файл слишком велик, чтобы поместиться в память, тогда единственным разумным выбором является сортировка слиянием на основе файлов, которая включает в себя два прохода.
В первом проходе считайте блоки из N записей (гдеN определяется как количество записей, которые помещаются в память), сортирует их и записывает во временный файл.Когда этот этап завершен, у вас либо есть номер (назовите его M) временных файлов, в каждом из которых содержится различное количество сортируемых записей, либо у вас есть один временный файл, содержащий блоки отсортированных записей.
Второй проход - это M-way merge.
Некоторое время назад я написал статью о том, как сделать это с помощью текстового файла.См. Сортировка большого текстового файла .Это довольно просто расширить, чтобы он мог сортировать другие типы записей, которые вы определяете.
Для получения дополнительной информации см. Внешняя сортировка .