Нужен алгоритм внешней сортировки простым слиянием. Если размер массива 2^n - фигня вопрос, дело десяти минут. А если произвольный размер массива? Вторую неделю придумать не могу, башка дымиться
Алгоритм. Внешней сортировки простым слиянием. Сортировка есть такая - простым слиянием, внешняя. Элементарно реализуется если размер сортируемого массива данных 2^n. Могу описать сам алгоритм...
В Высшей Степени Научно! Если ты разрабатываешь драйве для файлухи, или СУБД на raw девайсах оно, конечно, не совсем глупо, хотя и тривиально...
На практике же ты имеешь дело с кэшированием/буферизацией с последующим рескедьюлингом как на уровне операционки, так и на уровне контроллеров, а все 2*P девайсов объединены в (страйпнутый) райд.
Имеется много реализаций split'n'merge для случаев, когда данные не влезают в память. Собственно, почти все реализации сортировки данных, не влазающих в память, основанны на split'n'merge.
По моим наблюдениям,
1. Оптимальнее всего сливать не P ветвей, а 2. Мало того, при P>2 на достаточных объемах данных (начиная уже с сотен гигабайт) получаются проблемы, особенно под RaiserFS.
2. Буферизация необходима, но сортировку лучше отделять от буферизации.