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

          

Частичная сортировка (выбор)


Как при данных именах

Частичная сортировка (выбор)
можно найти
Частичная сортировка (выбор)
-е из наибольших в порядке убывания? Задача, очевидно, симметрична: отыскание
Частичная сортировка (выбор)
-го наибольшего (
Частичная сортировка (выбор)
-го наименьшего) имени можно осуществить, используя алгоритм отыскания
Частичная сортировка (выбор)
-го наибольшего, но меняя местами действия, предпринимаемые при результатах < и >сравнения имен. Таким образом, отыскание наибольшего имени
Частичная сортировка (выбор)
эквивалентно отысканию наименьшего имени
Частичная сортировка (выбор)
; отыскание второго наибольшего имени
Частичная сортировка (выбор)
эквивалентно отысканию второго наименьшего
Частичная сортировка (выбор)
и т.д.

Конечно, все перечисленные варианты задачи выбора можно решить, используя любой из методов полной сортировки имен и затем тривиально обращаясь к

Частичная сортировка (выбор)
-му наибольшему. Такой подход потребует порядка
Частичная сортировка (выбор)
сравнений имен независимо от значений
Частичная сортировка (выбор)
.

При использовании алгоритма сортировки для выбора наиболее подходящим будет один из алгоритмов, основанных на выборе: либо простая сортировка выбором (алгоритм 15.1) либо пирамидальная сортировка (алгоритм 15.3). В каждом случае мы можем остановиться после того, как выполнены первые

Частичная сортировка (выбор)
шагов. Для простой сортировки выбором это означает использование

Частичная сортировка (выбор)

сравнений имен, а для пирамидальной — использование

Частичная сортировка (выбор)
сравнений имен. В обоих случаях мы получаем больше информации, чем нужно, потому что мы полностью определяем порядок
Частичная сортировка (выбор)
наибольших имен.



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