Skip to content

kuznetsov-as/merge_sort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сортировка слиянием нескольких файлов

Параметры программы задаются при запуске через аргументы командной строки:

  1. режим сортировки (-a или -d), необязательный, по умолчанию сортируем по возрастанию;
  2. тип данных (-s или -i), обязательный;
  3. имя выходного файла, обязательное;
  4. остальные параметры – имена входных файлов, не менее одного.

Примеры запуска из командной строки для Windows (для приложенного файла "merge_sort.jar"):

  • java -jar merge_sort.jar -i -a out.txt in1.txt (для целых чисел по возрастанию)
  • java -jar merge_sort.jar -s out.txt in1.txt in2.txt in3.txt (для строк по возрастанию)
  • java -jar merge_sort.jar -d -s out.txt in1.txt in2.txt (для строк по убыванию)

Алгоритм:

  1. Читатем входной файл с самого начала.
  2. Считываем число записей (по умолчанию 100), заданное в maxLinesInMemoryBuffer (или меньше, если число оставшихся в файле записей(countOfLinesInTheFile) меньше, чем maxLinesInMemoryBuffer) из файла и сохраняем их во временном буфере.
  3. Сортируем числа в буфере методом "пузырька".
  4. Создаем временный файл на диске и записываем отсортированные номера из шага 3 в этот временный файл. Сохраняем имя временного файла.
  5. Повторяем шаги 2-4, пока все записи из входного файла не будут прочитаны, отсортированы и записаны во временные файлы.

На данный момент у нас есть куски чисел размера maxLinesInMemoryBuffer (или меньше), отсортированные и сохраненные во временных файлах на диске. Нам нужно объединить все эти отсортированные файлы в один отсортированный файл. Применяем алгоритм сортировки слиянием, чтобы объединить числа из этих отсортированных файлов.

Новый файл на диске теперь содержит отсортированный список записей из всех входных файлов.

Особенности реализации:

  1. Программа работает с файлами, данные в которых изначально не отсортированны. Первоначальная сортировка производится методом «пузырька». (Этот функционал реализован в классе "BubbleSort").
  2. Алгоритм устойчив к большим данным, поле maxLinesInMemoryBuffer принадлежащее классу FileSplitterForInt/FileSplitterForString определяет максимальное кол-во значений, которые будут взяты из входного файла за один проход, позже они сортируются и записываются во временный файл. (изначально maxLinesInMemoryBuffer == 100)
  3. Реализована обработка невалидных значений для целочисленных значений. Примеры:

В файле in1.txt обнаружен некорректный формат числового значения: "4." Производится попытка преобразования. Попытка преобразования прошла успешно. Новое значение: "4"

В файле in1.txt обнаружен некорректный формат числового значения: "j23" Производится попытка преобразования. Попытка преобразования прошла успешно. Новое значение: "23"

В файле in1.txt обнаружен некорректный формат числового значения: "s" Производится попытка преобразования. Не удалось выполнить преобразование.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages