Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

11.3. Изучение сортировки алгоритмической линзы 531

11.3.3 Сравнение алгоритмов сортировки

В этом пункте для нас могло бы быть полезно вздохнуть и рассмотреть весь algo-

rithms мы учились в этой книге, чтобы сортировать вектор n-элемента, список узла или общую последовательность.

Рассмотрение продолжительности и других факторов

Мы изучили несколько методов, таких как вид вставки и вид выбора, это

имейте O (n2) разовое поведение в среднем и худшем случае. Мы также изучили sev-eral, методы с O (n регистрируют n), разовое поведение, включая вид кучи, вид слияния и быстрый вид. Наконец, мы изучили специальный класс сортировки алгоритмов, а именно, вида ведра и методов вида корня, того пробега в линейное время для определенных типов ключей. Конечно, алгоритм вида выбора - плохой выбор в любом применении, так как это управляет в O (n2) временем даже в лучшем случае. Но, остающихся алгоритмов сортировки, который является лучшим?

Как со многими вещами в жизни, нет никакого ясного «лучшего» алгоритма сортировки от

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

Вид вставки

Если осуществлено хорошо, продолжительность вида вставки - O (n + m), где m

число инверсий (то есть, число пар элементов не в порядке). Таким образом вид вставки - превосходный алгоритм для сортировки маленьких последовательностей (скажите, меньше чем 50 элементов), потому что вид вставки прост к программе, и у маленьких последовательностей обязательно есть немного инверсий. Кроме того, вид вставки довольно эффективный для сортировки последовательностей, которые уже «почти» сортированы. «Почти», мы подразумеваем, что число инверсий маленькое. Но O (n2) разовое исполнение вида вставки делает его плохим выбором за пределами этих специальных контекстов.

Вид слияния

Вид слияния, с другой стороны, пробеги в O (n регистрируют n), время в худшем случае, который является

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

532

Глава 11. Сортировка, Наборы и Выбор, где вход не может все вписаться в главную память, но должен быть сохранен в блоках на внешнем устройстве памяти, таких как диск. В этих контекстах способ, которым вид слияния обрабатывает пробеги данных в длинных потоках слияния, лучше всего использует все данные, принесенные в главную память в блоке от диска. Таким образом, для внешнего вида памяти - луг, алгоритм вида слияния имеет тенденцию минимизировать общее количество диска, читает и пишет необходимый, который делает алгоритм вида слияния выше в таких контекстах.

Быстрый вид

Экспериментальные исследования показали что, если входная последовательность может соответствовать полностью в главной памяти, то оперативные версии быстрого вида и вида кучи бегут быстрее, чем вид слияния. Дополнительное верхнее, необходимое для копирования узлов или записей, помещает слияние - вид в неблагоприятных условиях к быстрому виду и виду кучи в этих заявлениях. Фактически, быстрый вид имеет тенденцию, в среднем, бить вид кучи в этих тестах. Так, быстрый вид - отличный выбор как алгоритм сортировки в памяти, общего назначения. Действительно, это включено в qsort сортировка полезности, обеспеченной в библиотеках языка C. Однако, его O (n2) работа худшего случая времени делает быстрый вид плохим выбором в режиме реального времени applica-tions, где мы должны сделать гарантии на времени, должен был закончить операцию по сортировке.

Вид кучи

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

Вид ведра и вид корня

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

потому что это управляет в O (d (n + N)) временем, где [0, N- 1] диапазон ключей целого числа

d = 1 для вида ведра). Таким образом, если d (n + N) значительно «ниже» n n регистрации

функция, тогда этот метод сортировки должен бежать быстрее, чем даже быстрый вид или куча - вид.

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