
- •Понятие «сортировка». Устойчивость сортировки.
- •Задача сортировки.
- •Понятие «ключевое поле» в сортировке.
- •Понятие внутренней сортировки.
- •Понятие внешней сортировки.
- •Причины изучения алгоритмов сортировки.
- •Группы алгоритмов внутренней сортировки.
- •Основные идеи методов сортировок с помощью вставок.
- •2)Улучшение метода простых вставок:
- •Сортировка методом простых вставок.
- •Основные идеи методов сортировок с помощью выбора.-min эл.
- •Сортировка с помощью метода прямого выбора.
- •Основные идеи методов сортировки с помощью обмена.
- •Сортировка методом Шелла.
- •Быстрая сортировка.-разобрать
- •Понятие эффективности алгоритмов и программ.
- •Виды эффективности алгоритмов программ.
- •Порядок сложности алгоритма.
- •Понятие «доминирующая» функция, «асимптотически доминирующая» функция.
- •Правила определения сложности функции.
- •Доминирование функций друг над другом.-разобрать хрень!!!
- •Понятие алгоритма полиноминальной сложности.
- •Понятие алгоритма неполиноминальной сложности.
- •Вопрос 27.
- •Проблемы реализации np-сложных алгоритмов.
- •Вопрос 27.
- •Соответствие между скоростью выполнения алгоритма и его сложностью.
- •Анализ лучшего, худшего и среднего случаев поведения алгоритма.
- •31* Ограниченность о-анализа.
- •Пространственная сложность программы.
- •Взаимосвязь различных типов сложности.
- •Контрольные замеры.
- •Файлы. Их организация и обработка.
- •Стоимость операций с вторичной памятью.
- •Внешняя сортировка. Особенности внешней сортировки.
- •Понятие «серия», «слияние», «хвост», «фаза», «этап» в алгоритмах внешней сортировки.
- •38* Алгоритм 2-х фазной сортировки прямым слиянием.
- •Алгоритм однофазной сортировки прямым слиянием.
- •Алгоритм сортировки «естественным слиянием».
- •Ускорение сортировок прямым слиянием.
- •Задача поиска.
- •Классификация методов поиска.
- •Связь задач сортировки и поиска.
- •Последовательный поиск.
- •Быстрый последовательный поиск.
- •Последовательный поиск в упорядоченной таблице. Поиск путем сравнения ключей.-херня!
- •Бинарный поиск. Интерполяционный поиск.
- •Хеширование Выбор хеш-функций.
- •Хеширование. Разрешение коллизий.
Сортировка методом Шелла.
Улучшенные методы сортировки.
Сортировка вставками.
сортировка с убывающем смещением = сортировка Шелла
b1 b2… | bj… bn
Каждый проход сортировки хар-ся неким смещением Н и между собой сортируются записи, каждая из которых отстоит от предыдущих на Н позиций.
Суть: на каждом проходе сортировки все предыдущие записи делятся на группы. В каждую группу попадают записи, отстающие от друг друга на Н позиций. Затем каждая группа записей сортируется методом простых вставок.
На следующем проходе сортировки все записи снова делятся на группы, но отстоящие друг от друга уже на другое, меньшее, чем раньше, расстояние. И снова каждая группа записей сортируется методом простых вставок. На последнем этапе шаг равен 1, т к в самом плохом случае на последнем проходе будет проведена оставшаяся сортировка. Выбор значений смещений на последующих проходах имеет существенное значение для скорости сортировки. До сих пор неизвестно, какие расстояния дают наилучшие результаты. Желательно, чтобы взаимодействие различных цепочек проходило как можно чаще.
3 7 15 31.
1 2 4 8.
3 7 0 -1 5 2 4 -6 11 4 -78 8 15 -4 14 4 2 1 шаги
3 5 11 15 – сортируем методом простых вставок (тут уже все готово)
7 2 4 -4
2 7 4 -4
2 4 7 -4
-4 2 4 7
0 4 -78 14
0 4 -78 14
-78 0 4 14
-1 -6 8
3 -4 -78 -6 5 2 0 -1 11 4 4 8 15 7 14
3 -78 5 0 11 4 15 14
-78 0 3 4 5 11 14 15
-4 -6 2 -1 4 8 7
-6 -4 -1 2 4 7 8
-78 -6 0 -4 3 -1 4 2 5 4 11 7 14 8 15
Сортируем….
-78 -6 -4 -1 0 2 3 4 4 5 7 8 11 14 15
Быстрая сортировка.-разобрать
Это основной алгоритм сортировки, ибо в большинстве случаев он дает наилучшие результаты (придумал Hoare). Основная идея заключается в следующем. Выберем некий элемент M внутри диапазона, например в середине. Затем все элементы большие этого числа переносятся в одну сторону, а меньшие в другую. На практике это выглядит так:
ищем первый элемент меньший (или равный) выбранного элемента M от начала диапазона,
ищем первый элемент больший (или равный) выбранного элемента M от конца диапазона,
меняем их местами.
Продолжаем это до тех пор, пока больший элемент и меньший лежат по разные стороны. После этого вызываем алгоритм рекурсивно для двух новых диапазонов, границами которых служат последние индексы найденных меньшего и большего элементов.
Улучшенные методы сортировки.
Сортировка обменами.
Быстрая сортировка = обменная сортировка с разделением.
b1 b2 b3… bn
k1 k2 k3… kn
Выбираем k опорное или эталонное. Идем слева направо или наоборот.
Например, сначала слева-направо, потом справа-налево.
Находим k > kоп. Останавливаемся. Начинаем движение с конца массива. Ищем k < kоп. Останавливаемся. Меняем местами эти эл. Опять идем слева направо с эл., на кот. мы остановились. И опять повторяем все.
После того, как все отсортировали – делим массив на 2 части (м.б. неровные).
Из этих 2-х частей опять делаем сортировку (ту, что написана выше).
Можно использовать рекурсию или итерации.