Комбинаторные алгоритмы для программистов

          

Внутренняя сортировка


Существует по крайней мере пять широких классов алгоритмов внутренней сортировки.

  1. Вставка. На
    Внутренняя сортировка
    -м этапе
    Внутренняя сортировка
    -е имя помещается на надлежащее место между
    Внутренняя сортировка

    уже отсортированным именами:

Внутренняя сортировка

  1. Обмен. Два имени, расположение которых не соответствует порядку, меняются местами (обмен). Эти процедуры повторяются до тех пор, пока остаются такие пары.

Внутренняя сортировка

  1. Выбор. На
    Внутренняя сортировка
    -м этапе из неотсортированных имен выбирается
    Внутренняя сортировка
    -е наибольшее (наименьшее) имя и помещается на соответствующее место.

Внутренняя сортировка

  1. Распределение. Имена распределяются по группам, и содержимое групп затем объединяется таким образом, чтобы частично отсортировать таблицу; процесс повторяется до тех пор, пока таблица не будет отсортирована полностью.
  2. Слияние. Таблица делится на подтаблицы, которые сортируются по отдельности и затем сливаются в одну.

Внутренняя сортировка

Эти классы нельзя назвать ни взаимоисключающими, ни исчерпывающими: одни алгоритмы сортировки можно с полным основанием отнести более чем к одному классу (пузырьковую сортировку можно рассматривать и как выбор, и как обмен), а другие не укладываются ни в один из классов. Тем не менее, перечисленные пять классов достаточно удобны для классификации обсуждаемых алгоритмов сортировки.

Сосредоточим внимание на первых четырех классах алгоритмов сортировки. Алгоритмы, основанные на слиянии, приемлемы для внутренней сортировки, но более естественно рассматривать их как методы внешней сортировки.

В описываемых алгоритмах сортировки имена образуют последовательность, которую будем обозначать

Внутренняя сортировка
независимо от возможных пересылок данных; таким образом, значением
Внутренняя сортировка
является любое текущее имя в
Внутренняя сортировка
-й позиции последовательности. Многие алгоритмы сортировки наиболее применимы к массивам; в этом случае
Внутренняя сортировка
обозначает
Внутренняя сортировка
-й элемент массива. Другие алгоритмы более приспособлены для работы со связанными списками: здесь
Внутренняя сортировка
обозначает
Внутренняя сортировка
-й элемент списка. Следующие обозначения используются для пересылок данных:

Внутренняя сортировка
значения
Внутренняя сортировка
и
Внутренняя сортировка
меняются местами.

Внутренняя сортировка
значение
Внутренняя сортировка
присваивается имени
Внутренняя сортировка
.

Внутренняя сортировка
значение имени
Внутренняя сортировка
присваивается
Внутренняя сортировка
.

Таким образом, операция

Внутренняя сортировка
, которая встречается в различных алгоритмах сортировки, временно нарушает предположение о том, что никакие два имени не имеют одинаковых значений.
Однако это условие всегда обязательно восстанавливается.

В каждом из рассматриваемых алгоритмов будем считать, что имена нужно сортировать на месте. Другими словами, переразмещение имен должно происходить внутри последовательности
Внутренняя сортировка
; при этом существуют одна или две дополнительные ячейки, в которых временно размещается значение имени. Ограничение "на месте" основано на предположении, будто число имен настолько велико, что во время сортировки не допускается перенос их в другую область памяти. Если в распоряжении имеется память, достаточная для такого переноса, то некоторые из обсуждаемых алгоритмов можно значительно ускорить. Эти рассмотрения заставляют нас в алгоритмах распределяющей сортировки и сортировки слиянием реализовать последовательность
Внутренняя сортировка
как связанный список.


Содержание раздела