Я не нашел вопрос с очень простым ответом на этот вопрос, так что здесь.
Кстати, если вы работаете на 64-битной машине, вам следует серьезно подумать о том, чтобы записать все данные в файл, отобразить в памяти файл и просто использовать тот массив, который вам нравится. Быстрая сортировка довольно приятна для кэша: она не будет сильно зависать. Задание, вероятно, предназначено, чтобы помешать вам сделать это, но может быть немного устаревшим; -)
В противном случае вам нужен какой-то внешний вид. Есть и другие способы сделать это, но я думаю, что сортировка слиянием, вероятно, самая простая. Перед началом слияния:
- определите, сколько данных вы можете поместить в память (или, опять же, отобразить их). Если вы работаете на ПК, то 1 ГБ выглядит вполне обоснованным предположением, но может быть в несколько раз больше или меньше.
- загрузить столько данных (так, например, один из ваших 6 файлов)
- Быстрая сортировка (поскольку вы пометили «Быстрая сортировка», я думаю, вы знаете, как это сделать) или любой другой вид по вашему выбору.
- запишите его обратно на диск (если вы не сделали mmap).
В результате у вас останется 6 файлов по 1 ГБ, каждый из которых будет отсортирован по отдельности. На этом этапе вы можете либо работать постепенно, либо делать все за один раз. С 6 кусками все в порядке, что называется «объединением в 6 направлений»:
- открыть файл для записи
- откройте 6 файлов для чтения и прочитайте несколько миллионов записей из каждого
- проверить 6 записей в начале каждого из 6 буферов. Один из тезисов 6 должен быть самым маленьким из всех. Запишите это в вывод и продвиньтесь на один шаг вперед через этот буфер.
- Когда вы достигнете конца каждого буфера, заполните его из правильного файла.
Существует некоторая оптимизация, которую вы можете предпринять, чтобы определить, какая из ваших 6 возможностей наименьшая, но большая разница в производительности будет заключаться в том, чтобы убедиться, что вы используете достаточно большие буферы чтения и записи.
Очевидно, что нет ничего особенного в том, что слияние происходит в 6 направлений. Если вы предпочитаете двухстороннее слияние, которое легче кодировать, то, конечно, вы можете. Для объединения 6 файлов потребуется 5 двусторонних слияний.