Для сортировки фрагментов используется метод сортировки выбором
- Сортировка расчитана исключительно на однобайтовые кодировки (не сложно поддержать и многобайтовые, но отвлекаться на это не хотелось)
- Считаем, что порядок символом должен соответствовать порядку их расположения в таблице ASCII
- В условиях временных ограничений не ставилось целью сделать хорошее оформление кода и разбиение на структуры
- Решение не претендует быть оптимальным и требует доработки (как архитектурной, так и логической)
- Для удобства визуальной проверки алгоритма, генерация файла использует только символы от A до Z
- Исходный файл разбивается на фрагменты по 1000 строк
- Каждый фрагмент сортируется методом сортировки выбора и сохраняется во временную папку
- Отсортированные фрагменты объединяются методом сортировки слиянием до тех пор, пока не останется одного файла
- Установить Go 1.13.*
- Склонировать репозиторий
git clone https://github.com/oleg-raev/ext_merge_sort.git - Зайти в папку репозитория в терминале
cd ext_merge_sort - Собрать проект
GO111MODULE=on go build(если не удается, попробуйте загрузить зависимостиGO111MODULE=on go mod tidy) - Исполняемый файл будет располагаться по адресу ./ext_merge_sort
ext_merge_sort -help
ext_merge_sort -generate \
-out="{адрес файла назначения}" \
-lines={количество строк} \
-rowlen={максимальная длина строки}
ext_merge_sort -sort \
-in="{адрес файла с данными}"
-out="{адрес файла назначения}"