Я пытаюсь понять, как работает алгоритм сортировки внешних слияний (я видел ответы на один вопрос, но не нашел, что мне нужно). Я читаю книгу "Анализ алгоритмов" Джеффри МакКоннелла, и я пытаюсь реализовать описанный там алгоритм.
Например, у меня есть входные данные: 3,5,1,2,4,6,9,8,7
, и я могу загрузить только 4 числа в память.
Мой первый шаг - прочитать входной файл в 4-х столбцах, отсортировать их в памяти и записать один в файл A и рядом с файлом B.
Я получил:
A:[1,2,3,5][7]
B:[4,6,8,9]
Теперь мой вопрос: как я могу объединить куски из этих файлов в более крупные, если они не подходят для памяти? Джеффри Макконнелл написал, что мне нужно прочитать половинки и объединить их в следующие файлы C и D.
Но я получил неправильную последовательность:
C:[1,2,4,6,3,8,5,9]
D:[7]
Может ли кто-нибудь предоставить пример пошаговой инструкции, пожалуйста?
PS: Я понимаю, как объединить число по числу, читая из файла, но как это сделать с буферами в памяти для уменьшения операций ввода-вывода?