Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
19.04.2015
Размер:
432.96 Кб
Скачать

31. Алгоритмы сортировки. Постановка задачи, классификация, анализ эффективности. Основные алгоритмы (обмен, выбор, вставка, шейкер, метод Шелла, быстрая, поразрядная, пирамидальная).

Считается, что 25% машинного времени систематически тратится на сортировку. Во многих вычислительных системах на нее тратится более половины машинного времени. Это может означать одно из трех:

  1. Либо сортировка имеет много важных применений.

  2. Либо ей часто пользуются без нужды.

  3. Либо применяются в основном неэффективные алгоритмы.

Задача сортировки - найти такую перестановку записей p1, p2, ..., pn, после которой ключи расположились бы в неубывающем порядке:

Kp(1)  Kp(2) ... Kp(n).

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

p(i)  p(j) для любых Kp(i)  Kp(j) и i < j.

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

- < Ki < для всех 1<=i <=N .

Эти величины используются в качестве граничных признаков.

Обычно сортировку подразделяют на:

    1. Внутреннюю - все записи хранятся в оперативной памяти, таким образом, как правило, это сортировка массивов.

    2. Внешнюю – записи хранятся на внешнем запоминающем устройстве, это сортировка файлов.

Основное требование к методам сортировки – экономное использование памяти. Удобной мерой эффективности является подсчет числа С - сравнений ключей и М – пересылок элементов. Достаточно хороший алгоритм затрачивает на сортировку N записей время порядка N*log(N). Простейшие алгоритмы сортировки, которые мы рассмотрим в этой главе, обладают характеристикой порядка N2. Если N достаточно мало, то простые алгоритмы достаточно выгодно использовать в силу простоты их реализации.

Метод

Уст-ть

T в средн

T в худ.

Доп. ресурсы памяти

Пузырька

Да

O(N2)

O(N2)

Нет

Шейкер

Да

O(N2)

O(N2)

Нет

Простой выбор

Нет

O(N2)

O(N2)

Нет

Простая вставка

Да

O(N2)

O(N2)

Нет

Бинарная вставка

Нет

O(N2)

O(N2)

Нет

Шелла

Нет

O(N3/2)

O(N3/2)

Нет

Быстрая

Нет

O(NlogN)

O(N2)

log N

Обменная поразрядная

Нет

O(NlogN)

O(NlogN)

log N

Пирамидальная

Нет

O(NlogN)

O(NlogN)

Нет

Сортировки обменами Алгоритм сортировки обменами (метод пузырька).

Последовательно сравниваем пары соседних элементов xj, xj+1 (j = 1,2,3,..., n-1) и если xj > xj+1, то они переставляются. Тем самым наибольший элемент “всплывает” в конец массива. Затем этот метод применяют ко всем элементам, кроме последнего и т.д.

Число сравнений C в методе пузырька равно С= (n2-n)/2.

Минимальное количество пересылок (присваиваний) для массива отсортированного равно Mmin=0.

Для массива, отсортированного в обратном порядке, значение максимальное равно Mmax=3/2*(n2-n).

Среднее значение можно вычислить для всех n перестановок ключей, число которых равно n!, Mср=3/4*(n2-n). Метод пузырька не обладает никакими достоинствами, кроме легко запоминающегося названия.

Соседние файлы в папке Структуры и алгоритмы компьютерной обработки данных