c++ сортировка файла с помощью упорядоченных групп и слияния

Не понимаю как решить задачу 654 с учебника Абрамова.

Для сортировки файла g может быть применен следующий алгоритм. Пусть h, a, b - вспомогательные файлы. Прежде всего, компоненты файла g распределяются по файлам a, b: компоненты с четными номерами попадают в файл а, а компоненты с нечетными номерами – в b. Эти компоненты рассматриваются как упорядоченные группы, по одной компоненте в каждой, а файлы a, b – как согласованно 1- упорядоченные (см. предыдущую задачу). Затем с помощью алгоритма, описанного в предыдущей задаче, файлы g и h превращаются в согласованно 2-упорядоченные и т.д. Так как число упорядоченных групп убывает с каждым применением предложенного в предыдущей задаче алгоритма, то настанет момент, когда все компоненты соберутся в некотором файле в виде упорядоченной группы; на этом упорядочение будет закончено. Этот алгоритм очень похож на алгоритм фон Неймана, для массивов (см. задачу 636) и тоже относится к алгоритмам сортировки слияниями. Реализовать этот алгоритм в виде программы.

Предыдущая задача для контекста: 653. Пусть a и b – файлы, k – натуральное число. Будем говорить, что файлы a и b согласованно k-упорядочены, если

  1. в каждом из файлов a и b первые k компонент, следующие за ними k компонент и т.д. образуют упорядоченные группы; последняя группа файла (тоже упорядоченная) может быть неполной, т.е. содержать менее k компонент, но при этом только один из файлов a и b может иметь неполную последнюю группу;
  2. число упорядоченных групп файла a отличается от числа упорядоченных групп файла b не более чем на единицу;
  3. если в одном файле число упорядоченных групп меньше на единицу, чем в другом, то неполной может быть только последняя группа более длинного файла. Компоненты двух согласованно k - упорядоченных файлов a и b можно разместить в файлах g и h так, что g и h будут согласованно 2k- упорядочены. Это делается с помощью описанных в предыдущей задаче слияний; при этом результаты слияний попеременно размещаются то в файле g, то в файле h. Рис. 35 демонстрирует происходящее при первых двух слияниях. Файлы представлены в виде отрезков, части которых изображают упорядоченные группы с указанным числом компонент.

Ответы (0 шт):