Читайте также: |
|
1. Задать массив из n чисел.
2.1 Левая_граница = 0.
2.2. Правая_граница = n.
2.3. Повторять
2.3.1. Движение слева направо:
1) Для i = Левая_граница; i < Правая_граница; i ++
Если элементы i -тый и (i +1)-вый стоят неправильно,
a) Поменять их местами;
b) Номер = i.
2.3.2. Движение справа налево:
1) Правая_граница = Номер.
2) Для i = Правая_граница; i > Левая_граница; i--
Если элементы i -тый и (i +1)-вый стоят неправильно,
a) Поменять их местами;
b) Номер = i.
2.3.3. Левая_граница = Номер.
Пока Левая_граница < Правая_граница.
3. Вывести отсортированный массив.
4. Закончить.
Анализ шейкерного алгоритма довольно сложен. Число сравнений и пересылок в худшем случае пропорционально n2, т.е. его сложность равна О(n2).
3.3. Эффективные методы внутренней сортировки
К этим методам можно отнести следующие.
1) Сортировку Шелла;
2) Быструю сортировку;
3) Пирамидальную сортировку (с помощью двоичного дерева), алгоритм которой будет рассмотрен позднее, когда будут изучаться деревья.
3.3.1. Сортировка Шелла
Метод является ускоренным вариантом сортировки вставками. При этом ускорение достигается за счет увеличения расстояния, на которое перемещаются элементы. Исходный массив делится на d частей, содержащих n / d элементов каждый (последний подмассив может быть короче). Подмассивы содержат элементы с номерами [0, d, 2 d и т.д.], [1, d +1, 2 d +1 и т.д.], [2, d + 2, 2 d +2 и т.д.] и т.д.
Вначале сравниваются и упорядочиваются с помощью алгоритма вставок элементы, отстоящие один от другого на расстоянии d, т.е. имеющие номера 0 и 1, d и d + 1, 2 d и 2 d + 1 и т.д. Затем процедура повторяется при меньших значениях d, например, d /2. Завершается алгоритм упорядочением элементов при d =1, то есть обычной сортировкой вставками. Мы рассмотрим сортировку Шелла для начального значения d, равного n /2, и будем последовательно уменьшать его вдвое.
Дата добавления: 2015-07-11; просмотров: 135 | Нарушение авторских прав