Вы можете использовать следующую стратегию «разделяй и властвуй»:
Создайте функцию H (), которая может назначать каждой записи во входном файле номер.Для записи r2, которая будет отсортирована после записи r1, она должна вернуть большее число для r2, чем для r1.Используйте эту функцию, чтобы разбить все записи на отдельные файлы, которые поместятся в память, чтобы вы могли отсортировать их.Сделав это, вы можете просто объединить отсортированные файлы, чтобы получить один большой отсортированный файл.
Предположим, у вас есть этот входной файл, где каждая строка представляет запись
Alan Smith
Jon Doe
Bill Murray
Johnny Cash
Позволяет просто построить H(), чтобы он использовал первую букву в записи, чтобы вы могли получить до 26 файлов, но в этом примере вы просто получите 3:
<file1>
Alan Smith
<file2>
Bill Murray
<file10>
Jon Doe
Johnny Cash
Теперь вы можете отсортировать каждый отдельный файл.Что поменяет местами «Джон Доу» и «Джонни Кэш» в,Теперь, если вы просто объедините эти 3 файла, у вас будет отсортированная версия ввода.
Обратите внимание, что сначала вы делите, а потом завоевываете (сортируете) позже.Тем не менее, вы должны выполнять разбиение таким образом, чтобы результирующие части, которые вам нужно отсортировать, не перекрывались, что значительно упростит объединение результатов.
Метод, с помощью которого вы реализуете функцию разделения H (), очень сильно зависит от природы ваших входных данных.После того, как вы выяснили эту часть, остальное должно быть легким.