Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / Разные источники / Сортировка - основные понятия и определения.doc
Скачиваний:
44
Добавлен:
23.03.2015
Размер:
150.53 Кб
Скачать

Сортировка с помощью включения

Идея сортировки с помощью включения заключается в следую­щем.

Элементы массива делятся на уже «готовую» последовательность а1, ..., ai-iи исходную последовательность. При каждом шаге, начиная с i = 2 и увеличивая i каждый раз на единицу, из исходной последовательности извлекается i-й элемент и перекладывается в готовую последовательность, при этом он вставляется на нужное место.

Начальные ключи 44 55 12 42 94 18 0б 67

i= 2 44 55 12 42 94 18 0б 67

i=3 12 44 55 42 94 18 06 67

i=4 12 42 44 55 94 18 0б 67

i=5 12 42 44 55 94 18 0б 67

i=6 12 18 42 44 55 94 0б 67

i=7 Об 12 18 42 44 55 94 67

i=8 Об 12 18 42 44 55 67 94

В процессе поиска подходящего места необходимо, чередуя сравнения и движения по последовательности, как бы просеивать х, т. е. х сравнивается с очередным элементом aj, а затем либо х вставляется на свободное место, либо aj сдвигается (передается) вправо и процесс «уходит» влево. Обратите внимание, что процесс просеивания может закончиться при выполнении одного из двух следующих различных условий:

1. Найден элемент aj с ключом, меньшим чем ключ у х.

2. Достигнут левый конец готовой последовательности,

В зависимости от того, как происходит процесс включения эле­мента, различают прямое включение идвоичное включение.

Оценим трудоемкость приведенного выше алгоритма. Рекуррент­ное уравнение будет иметь следующий вид: Т(n) = Т(п — 1) + Сп, Т(1) = 0.Алгоритм имеет трудоемкостьO(n2).

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

Если линейный поиск в среднем требовал n/2 сравнений на п элементах, то двоичный поискlog2п сравне­ний (в худшем случае).

Следует отметить, что в правой части отрезка [L,R] поиск осу­ществляется быстрее, чем в левой. Следует также отметить, что алгоритм двоичного включения не позволяет улучшить оценку чис­ла пересылок элементов, которая остается в худшем случаеO(п) (хотя получено улучшение оценки для числа сравнений элементовO(log2n)).

Сортировка выбором

Идея сортировки заключается в следующем.

1. Выбрать элемент с наименьшим ключом и поменять его с пер­вым элементом. Теперь первый элемент стоит на своем месте.

2. Повторить действия с оставшимися п-1элементами.

3. Процесс заканчивается, когда п -1элементов будут помеще­ны на свои места.

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

Оценим трудоемкость приведенного выше алгоритма сортиров­ки выбором.

Поиск максимального элемента из п элементов и добавление его в уже готовую упорядоченную последовательность требует в худшем случаеСп операций (следует отметить, что количество сравнений ключей не зависит от начального расположения элемен­тов, а количество пересылок минимально, когда массив упорядочен (=3), и максимально, когда элементы расположены в обратном по­рядке), после чего повторяем описанный процесс для оставшихсяп — 1 элементов.

Тогда рекуррентное уравнение будет иметь следующий вид:

Т(n) = Сn+ Т(n- 1),T(1) = 0.

Алгоритм выбором имеет трудоемкость 0(п2).

На практике, как правило, алгоритм выбором предпочтительнее алгоритма с прямым включением.

Однако, если ключи в начале упорядочены или почти упорядо­чены, то прямое включение будет оставаться несколько более бы­стрым.