Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Сортировка. Часть №1.
Николай Гребенщиков, www.grebenshikov.ru
Сортировка - процесс перестановки объектов заданной со-вокупности в определенном порядке (возрастающем или убы-вающем).
Целью сортировки обычно является облегчение последу-ющего поиска элементов в отсортированном множестве.
В зависимости от объема и структуры данных методы сор-тировки подразделяются на:
• Внутренние - сортировка массивов
• Внешние - сортировка файлов
1
Формальное определение задачи сортировки
Дано: N объектов a1, a2, . . . , aN
Необходимо: упорядочить заданные объекты, т.е. переста-вить их в такой последовательности ap1, . . . , apN , чтобы ихключи расположились в неубывающем порядке kp1 ≤ kp2 ≤. . . ≤ kpN .
2
Устойчивость сортировки
При устойчивой сортироке относительный порядок элемен-тов с одинаковыми ключами не меняется.
Если kpi = kpj и i < j, то pi < pj.
3
Внутренние сортировки
• вставка (включение);
• выбор;
• обмен;
• подсчет;
• разделение;
• слияние.
4
Сортировка простыми вставками
40 | 51 8 38 90 14 2 6340 51 | 8 38 90 14 2 638 40 51 | 38 90 14 2 638 38 40 51 | 90 14 2 638 38 40 51 90 | 14 2 638 14 38 40 51 90 | 2 632 8 14 38 40 51 90 | 632 8 14 38 40 51 63 90 |
5
Сортировка простыми вставками
6
Анализ сортировки простыми вставками
Наихудший случай: упорядоченный в обратном порядке мас-сив
Количество сравнений:
C(N) = 1 + 2 + 3 + . . . + N − 1 = N ·(N−1)2 = O(N2)
Количество пересылок:
M(N) = N cdot(N−1)2 + 2 · (N − 1) = O(N2)
Общее время: T (N) = C(N) + M(N) = O(N2)
7
Сортировка бинарными вставками
Для поиска места используем бинарный поиск.
Количество сравнений: C(N) = O(N · log(N))
Количество пересылок: M(N) = O(N2)
Общее время: T (N) = C(N) + M(N) = O(N2)
8
Сортировка вставками с убывающим шагом. Метод Шел-ла.
На семинар.
9
Сортировка простым выбором
| 40 51 8 38 90 14 2 632 | 40 51 8 38 90 14 632 8 | 40 51 38 90 14 632 8 14 | 40 51 38 90 632 8 14 38 | 40 51 90 632 8 14 38 40 | 51 90 632 8 14 38 40 51 | 90 632 8 14 38 40 51 63 | 902 8 14 38 40 51 63 90 |
10
Сортировка простым выбором
11
Анализ сортировки простым выбором
Наихудший случай: упорядоченный в обратном порядке мас-сив
Количество сравнений:
C(N) = (N − 1) + (N − 2) + . . . + 1 = N ·(N−1)2 = O(N2)
Количество пересылок:
M(N) = N − 1 = O(N)
Общее время: T (N) = C(N) + M(N) = O(N2)
12
Пирамидальная сортировка - сортировка выбором
Идея: поддерживать область массива в которой ищем в видесбалансированного дерева поиска (пирамиды, кучи, heap).
В 〈h1, . . . , hn〉 элемент hi образует пирамиду если:
• (2i ≤ n⇒ hi ≥ h2i) ∧ h2i образует пирамиду;
• (2i + 1 ≤ n⇒ hi ≥ h2i+1) ∧ h2i+1 образует пирамиду;
Элементы hn2+1, . . . , hn всегда образуют тривиальные пира-
миды.13
Полная пирамида для 15-ти элементов
14
Полная пирамида для 12-ти элементов
15
Алгоритм пирамидальной сортировки
1. Входную последовательность превращаем в пирамиду.
2. Входная и готовая последовательность хранятся в одноммассиве. Берем голову пирамиды и помещаем в готовуюпоследовательность. Затем восстанавливаем пирамиду.И повторяем до тех пор пока вся посследовательностьне будет обработана.
16
Просеивание
17
Просеивание
18
Построение пирамиды
19
Сортировка пирамиды
20
Сортировка пирамиды (1 из 2)
21
Сортировка пирамиды (2 из 2)
22
Анализ пирамидальной сортировки
Время просеивания: O(log(N), т.к. высота пирамиды из N
элементов равна O(log(N))
При просеивании C(N) = 2 ·M(N)
Время подготовки пирамиды: O(N · log(n))
Время сортировки: O(N · log(n))
Общее время: T (N) = O(N · log(n))
23
Сортировка простым обменом. Метод пузырька.
24
Анализ сортировки простым обменом
Наихудший случай: упорядоченный в обратном порядке мас-сив
Количество сравнений:
C(N) = (N − 1) + (N − 2) + . . . + 1 = N ·(N−1)2 = O(N2)
Количество пересылок:
M(N) = C(N) = O(N2)
Общее время: T (N) = C(N) + M(N) = O(N2)
25
Улучшенная сортировка обменом. Шейкер-сортировка.
На семинар.
26
Список литературы
• Цикова В.А., Чурина Т.Г. Методы программирования: пе-рестановки, поиск и сортировка: Учеб. пособие / Ново-сиб. гос. ун-т. Новосибирск, 2006. Ч.2. 58 с. сс.26-41.
• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных иалгоритмы. - М. : Издательский дом “Вильямс”, 2000.сс.228-234, 244-246.
• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.173-197.
27
• Кнут Д, Искусство программирования, том 3. Сортировкаи поиск, 2-е изд. - М. : Издательский дома “Вильямс”,2000. сс.92-180.