Якщо дані, які необхідно посортувати, поміщаються в ОП
цілковито, то їх можна впорядкувати за допомогою різноманітних
алгоритмів [4, 5]. Найефективнішим є алгоритм швидкого
сортування. Однією з кращих вважають версію, яка передбачає
впорядкування тільки ключових полів, зберігаючи разом з ними
покажчики на повні записи.
Зауважимо, що ці алгоритми втрачають свої переваги, коли дані
розташовані на вторинних носіях. Якщо інформація, яку необхідно
посортувати, розташована, здебільшого, поза ОП, то доцільно
використати такий підхід, який передбачає виконання мінімальної
кількості переміщень блоків даних із вторинної пам’яті в
оперативну. Часто подібні алгоритми передбачають здійснення
декількох проходів, і під час одного проходу кожен блок один раз
зчитується з диска в ОП і зберігається на диску. У пункті 4.4 ми
розглянемо один із таких алгоритмів детальніше.
4.3. Сортування злиттям
Відомо, що алгоритм сортування злиттям (merge sort) дає
змогу об’єднувати посортовані списки в крупніші посортовані
списки. Цей алгоритм передбачає циклічне зіставлення найменших
ключів, по одному з кожного списку, переміщення запису, який
відповідає знайденому найменшому ключу, в підсумковий список, і
повторення операцій доти, доки один зі списків не буде вичерпано.
Потім до результуючого списку долучають залишок одного зі
списків. Таким шляхом отримують вичерпний список записів з
двох вихідних списків, посортований за зростанням значень ключа.
Приклад 8. Нехай маємо два посортовані списки з чотирма
записами у кожному. Вважатимемо, що структура запису містить
тільки ключовий елемент цілочислового типу. Списки такі:
(1, 3, 4, 9) і (2, 5, 7, 8). Ітерації процесу злиття проілюстровано на
рис. 8.
На першій ітерації порівнюють найменші елементи, 1 і 2, з обох
списків. Оскільки 1<2, то елемент 1, відібраний з першого списку,
стає початковим елементом підсумкового списку. На другій
ітерації порівнюють елементи 3 і 2; елемент 2 «перемагає» і
переноситься в підсумковий список. Процес продовжується доти,
доки на ітерації 7 другий список не буде вичерпано, після чого
31