- •Структуры и алгоритмы
- •ВвЕдение
- •Необходимые понятия и определения
- •Основные структуры данных
- •Задача сортировки массивов
- •Трудоемкость методов сортировки массивов
- •Задача сортировки последовательностей
- •Теорема о сложности сортировки
- •Задача поиска элементов с заданным ключом
- •Контрольные вопросы
- •Методы сортировки с квадратичной трудоемкостью
- •Метод прямого выбора
- •Алгоритм на псевдокоде
- •Пузырьковая сортировка
- •Алгоритм на псевдокоде
- •Шейкерная сортировка
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Метод Шелла
- •Метод прямого включения
- •Алгоритм на псевдокоде
- •Метод Шелла
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Быстрые методы сортировки массивов
- •Пирамидальная сортировка
- •Свойства пирамиды
- •Алгоритм на псевдокоде
- •Построение (1, 8)-пирамиды
- •Сортировка
- •Алгоритм на псевдокоде
- •Метод Хоара
- •Алгоритм на псевдокоде
- •Проблема глубины рекурсии.
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Работа с линейными списками
- •Указатели. Основные операции с указателями
- •Основные операции с линейными списками
- •Методы сортировки последовательностей
- •Метод прямого слияния
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Цифровая сортировка
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Двоичный поиск в упорядоченном массиве
- •Алгоритм двоичного поиска
- •Алгоритм на псевдокоде
- •Обозначим
- •Найден – логическая переменная, в которой будем отмечать факт успешного завершения поиска.
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Сортировка данных с произвольной структурой
- •Сравнение данных произвольной структуры
- •Сортировка по множеству ключей. Индексация
- •Алгоритм на псевдокоде (на примере пузырьковой сортировки)
- •Индексация через массив указателей
- •Контрольные вопросы
- •Хэширование и поиск
- •Понятие хэш-функции
- •Алгоритм на псевдокоде
- •Метод прямого связывания
- •Метод открытой адресации
- •Алгоритм на псевдокоде
- •Контрольные вопросы
- •Правила выполнения лабораторных работ
- •Лабораторная работа 1
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Лабораторная работа 4
- •Лабораторная работа 5
- •Лабораторная работа 6
- •Контрольная работа правила выполнения и оформления Контрольной работы
- •Правила выбора варианта Задания для контрольной работы одинаковы для всех студентов. Начальные данные выбираются индивидуально в зависимости от задания в контрольной работе.
- •Вопросы к зачету правила выставления зачета
- •Рекомендуемая литература
- •Псевдокод для записи алгоритмов
Алгоритм на псевдокоде
Пузырьковая сортировка
Обозначим i – номер итерации,
j – индекс правого элемента в текущей паре.
DO (i= 1, 2, ... n-1)
DO (j= n, n-1, ... i+1)
IF (aj < aj-1) aj ↔ aj-1 FI
OD
OD
Проанализируем сложность пузырьковой сортировки. Количество сравнений в методе прямого выбора и в методе пузырьковой сортировки одинаково и не зависит от исходной отсортированности массива. Однако количество пересылок M зависит от того, как часто выполняется условие aj < aj-1. Можно определить максимальное и минимальное значения Мmin Mсред Mmax,. где
Мmin = 0, при сортировке упорядоченного по возрастанию массива.
Mmax = 3C = , при сортировке упорядоченного по убыванию массива.
Отсюда следует, что Mсред=О(n2), при n
Таким образом, пузырьковая сортировка сильно зависит от исходной упорядоченности массива по количеству сравнений. Метод обеспечивает устойчивую сортировку.
Шейкерная сортировка
Анализируя метод пузырьковой сортировки можно отметить два обстоятельства. Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, ее можно исключить из рассмотрения. Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо. Эти две идеи приводят к следующим модификациям в методе пузырьковой сортировки. Границы рабочей части массива (т.е. части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо.
Пример. Отсортировать слово методом шейкерной сортировки. Подчёркнуты те пары, в которых произошёл обмен. Вертикальной чертой ограничена рабочая часть массива.
К |
У |
Р |
А |
П |
О |
В |
А |
|
|
|
|
|
|
А |
В |
|
|
|
|
|
А |
О |
|
|
|
|
|
А |
П |
|
|
|
|
|
А |
А |
|
|
|
|
|
А |
Р |
|
|
|
|
|
А |
У |
|
|
|
|
|
А |
К |
|
|
|
|
|
|
А |
К |
У |
Р |
А |
П |
О |
В |
|
К |
У |
|
|
|
|
|
|
|
Р |
У |
|
|
|
|
|
|
|
А |
У |
|
|
|
|
|
|
|
П |
У |
|
|
|
|
|
|
|
О |
У |
|
|
|
|
|
|
|
В |
У |
А |
К |
Р |
А |
П |
О |
В |
У |
|
|
|
|
|
|
|
|
|
|
|
|
|
В |
О |
|
|
|
|
|
В |
П |
|
|
|
|
|
А |
В |
|
|
|
|
|
А |
Р |
|
|
|
|
|
А |
К |
|
|
|
|
|
А |
А |
К |
Р |
В |
П |
О |
У |
|
|
К |
Р |
|
|
|
|
|
|
|
В |
Р |
|
|
|
|
|
|
|
П |
Р |
|
|
|
|
|
|
|
О |
Р |
|
А |
А |
К |
В |
П |
О |
Р |
У |
|
|
|
|
О |
П |
|
|
|
|
|
В |
О |
|
|
|
|
|
В |
К |
|
|
|
|
А |
А |
В |
К |
О |
П |
Р |
У |
|
|
|
К |
О |
|
|
|
|
|
|
|
О |
П |
|
|
А |
А |
В |
К |
О |
П |
Р |
У |
Рисунок 4 Шейкерная сортировка