
- •31. Алгоритмы сортировки. Постановка задачи, классификация, анализ эффективности. Основные алгоритмы (обмен, выбор, вставка, шейкер, метод Шелла, быстрая, поразрядная, пирамидальная).
- •Сортировки обменами Алгоритм сортировки обменами (метод пузырька).
- •Алгоритм шейкер-сортировки.
- •Алгоритм сортировки выбором.
- •Алгоритм сортировки вставками.
- •Алгоритм сортировки Шелла
- •Алгоритм быстрой сортировки
- •Поразрядная сортировка
- •Пирамидальная сортировка
31. Алгоритмы сортировки. Постановка задачи, классификация, анализ эффективности. Основные алгоритмы (обмен, выбор, вставка, шейкер, метод Шелла, быстрая, поразрядная, пирамидальная).
Считается, что 25% машинного времени систематически тратится на сортировку. Во многих вычислительных системах на нее тратится более половины машинного времени. Это может означать одно из трех:
Либо сортировка имеет много важных применений.
Либо ей часто пользуются без нужды.
Либо применяются в основном неэффективные алгоритмы.
Задача сортировки - найти такую перестановку записей p1, p2, ..., pn, после которой ключи расположились бы в неубывающем порядке:
Kp(1) Kp(2) ... Kp(n).
Сортировка называется устойчивой, если она удовлетворяет дополнительному условию, что записи с одинаковыми ключами остаются в прежнем порядке:
p(i) p(j) для любых Kp(i) Kp(j) и i < j.
Некоторые методы сортировки предполагают наличие элементов и - . Величина считается строго больше, а - строго меньше любого ключа:
- < Ki < для всех 1<=i <=N .
Эти величины используются в качестве граничных признаков.
Обычно сортировку подразделяют на:
Внутреннюю - все записи хранятся в оперативной памяти, таким образом, как правило, это сортировка массивов.
Внешнюю – записи хранятся на внешнем запоминающем устройстве, это сортировка файлов.
Основное требование к методам сортировки – экономное использование памяти. Удобной мерой эффективности является подсчет числа С - сравнений ключей и М – пересылок элементов. Достаточно хороший алгоритм затрачивает на сортировку 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). Метод пузырька не обладает никакими достоинствами, кроме легко запоминающегося названия.