Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 4_Сорт.doc
Скачиваний:
108
Добавлен:
15.02.2015
Размер:
1.85 Mб
Скачать

4.4.3. Обменная поразрядная сортировка

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

Этап 1. Сначала элементы сортируются по старшему значащему двоичному разряду так, чтобы ключи, начинающиеся с , оказались левее ключей, начинающихся с. Для этого ищется крайний слева ключ, начинающийся си крайний справа ключ, начинающийся с, после чегоименяются местами.

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

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

4.5. Сортировки посредством выбора

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

4.5.1. Сортировка с использованием бесконечно большого ключа

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

(а) Найти элемент с наименьшим значением ключа.

(б) Переслать его в область памяти, выделенную для отсортированного списка (область вывода), поместив на крайнее слева

ещё не занятое место.

(в) Заменить это значение ключа на .

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

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

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

4.5.2. Сортировка посредством простого выбора

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

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

Алгоритм сортировки посредством простого выбора содержит следующие этапы.

- Внешний цикл по

- вложенный цикл по для поиска

- обмен местами с.

По завершении -й итерации внешнего цикла элементызанимают окончательные позиции и далее в сравнениях не участвуют.

Возможности оптимизации процедур сортировки, основанных на поиске максимумов (или минимумов), ограничены:

Теорема. В любом алгоритме поиска максимального среди элементов необходимо выполнить не менеесравнений.

Доказательство легко проводится по индукции.