- •Лекция 13
- •План лекции
- •Задача сортировки
- •Устойчивая сортировка
- •Классификация алгоритмов сортировки
- •Сортировка включением
- •Пример
- •Программа
- •Анализ сортировки включением
- •Сортировка бинарными включениями
- •Сортировка выбором
- •Программа
- •Анализ сортировки выбором
- •Анализ сортировки выбором
- •Пирамидальная сортировка
- •Определение пирамиды
- •Макет пирамидальной сортировки
- •Макет пирамидальной сортировки
- •Просеивание
- •Построение пирамиды
- •Алгоритм пирамидальной сортировки
- •Просеивание
- •Пирамидальная сортировка
- •Анализ пирамидальной сортировки
- •Понятие сортировки
- •Сортировка простым обменом (пузырёк)
- •Пример
- •Алгоритм (метод пузырька)
- •Анализ
- •Улучшение метода пузырька
- •Шейкер-сортировка (алгоритм)
- •Шейкер-сортировка (продолжение)
- •Программа
- •Продолжение программы
- •Анализ
- •Сортировка подсчётом
- •Алгоритм (на одном массиве)
- •Сортировка с разделением
- •Сортировка разделением, идея алгоритма
- •Сортировка разделением (макет)
- •Анализ макета
- •Разделение массива
- •Процесс разделения
- •Комментарии
- •Комментарии
- •Комментарии
- •Процесс разделения, пример
- •Пример быстрой сортировки
- •Программа
- •Анализ
- •Нижняя граница числа сравнений в сортировке
- •Дерево решений для массива из 3 элементов
- •Для задачи сортировки в дереве решений N! листьев Значит, высота дерева решений log2(N)
- •Заключение
- •Анализ, продолжение
- •Анализ, продолжение
- •Алгоритм
- •Сортировка включениями с убывающим шагом. Метод Шелла
- •Пример работы сортировки Шелла
- •Пример работы сортировки Шелла, продолжение
- •Выбор шага в сортировке Шелла
- •Анализ эффективности метода
- •Алгоритм
- •Алгоритм, продолжение
- •Сортировка простым выбором
- •Пример
- •Обсуждение
- •Алгоритм
- •Пирамидальная сортировка
- •Сортировка, продолжение
Алгоритм
Условно разделить массив А на отсортированную и несортированную части. Сначала весь массив — это несортированная часть.
цикл по i от 1 до N–1 с шагом 1 выполнять
//i – номер первого элемента в несортированной части массива r = i;
//Найти минимальный элемент в несортированной части массива:
цикл по j от i+1 до N с шагом 1 выполнять
если А[j] < A[r] то r = j;
конец цикла
//Найденный минимальный элемент поменять местами с
//первым элементом несортированной части:
если i r то Обмен (i, r);
//Он будет последним элементом новой сортированной
//части массива A.
конец цикла
Пирамидальная сортировка
На каждом шаге сортировки первый элемент массива, минимальный элемент пирамиды, переносится в начало готовой последовательности путем обмена с последним элементом пирамиды, занимающим его место.
Затем остаток входной последовательности вновь перестраивается в пирамиду, обеспечивая корректность следующего шага.
В начале i-го шага элементы h[1], .., ai, по предположению, хранят входную последовательность как пирамиду, а ai+1, .., aN – упорядоченную по возрастанию готовую последовательность (изначально пустую).
На i-м шаге текущий максимальный элемент пирамиды а1 обменивается с аi, становясь началом новой готовой последовательности, где он будет новым минимальным элементом. Входная последовательность (пирамида) при этом претерпевает два изменения:
— она теряет последний элемент, что не нарушает условий пирамиды ни в одном узле;
— ее первый элемент становится произвольным, что может нарушать условие пирамиды только в первом узле.
Сортировка, продолжение
Таким образом, для новой входной последовательности
a1, ..., ai-1
условия пирамиды выполнены для всех элементов, кроме первого.
Применение процедуры просеивания к a1
восстанавливает полную пирамиду в a1, ..., ai-1, что
обеспечивает условия осуществимости следующего
шага.
