Comments 10
А есть репа с проектом? Не могу найти ссылку в статье
Не совсем понял, с каким проектом? Все примеры кода, касающиеся темы, приведены в статье
Просто я бы хотел скачать репу с проектом и тыкать в него. Сейчас мне нужно приложить усилия, чтобы перенести код и подготовить тестовые данные
В проекте эти алгоритмы довольно сильно привязаны к визуалу на WPF, так что для статьи я их подчистил. Очень не уверен, что ты хочешь сидеть и разбираться в том коде.
Но замечание к сведению принял, так что в следующий раз сделаю небольшой проектик для статьи)
Понял
Просто обычно к подобным статьям прикладывают репу с кодом и у меня возникли неоправдавшиеся ожидания
Вообще я хотел порефачить код, т.к. в коде много технических деталей и, кажется, можно повысить уровень абстракции, чтобы алгоритм был более явным.
Теперь метод для слияния записей из трёх файлов. Он у меня получился довольно громоздким (из-за проверок исключительных ситуаций, например, при конце серии в одном или двух из подфайлов). Поэтому буду рад предложениям по улучшению читаемости кода и оптимизации сортировок в комментариях.
Самое простое: сложить данные в массивы, readers, elements, counters
Тогда вместо свича будет доступ по индексу.
Второе: объединить варианты конца файла и конца серии. Все равно при поиске минимального элемента учитывается возможность null
Слишком много букаф, может кто-нибудь объяснить что этот алгоритм/алгоритмы делают в кратце?
Всего лет 60 назад, стандартная внешняя сортировка на IBM/360 выделяла буфер в памяти. Из входного файла или call-back функции считывалось столько записей, сколько помещалось в этом буфере. После чего указатели на записи в буфере сортировались обычным QuickSort. Записи из буфера записывались в промежуточный файл в отсортированном порядке. Следующий отсортированный блок записывался в другой файл. А следующий - опять в первый. По окончании сортировки блоков, переходили к фазе слияния уже отсортированных блоков.
С тех пор мало что изменилось и стандартная *nix команда sort работает по такому же принципу.
Теперь метод для слияния записей из трёх файлов. Он у меня получился довольно громоздким (из-за проверок исключительных ситуаций, например, при конце серии в одном или двух из подфайлов). Поэтому буду рад предложениям по улучшению читаемости кода и оптимизации сортировок в комментариях.
Можно делать слияние в цикле до тех пор, пока все три цепочки содержат элементы. Тогда внутри цикла не нужно будет проверок цепочек на окончание. А когда одна из цепочек закончится, то переключаться на слияние двух цепочек.
«Внешние» сортировки: что это, зачем это и как это реализовать?