- •Основные понятия структур
- •Концепция типа данных, простейшие типы данных, стандартные типы данных, органические типы (диапазоны)
- •Статические и полустатические структуры данных
- •2. 1. Массив.
- •2. 2. Запись, записи с вариантами.
- •2. 3. Стек.
- •5. Очередь
- •2. 7. Отображение
- •Динамические структуры данных
- •3.1. Односвязные списки, кольцевой список
- •3. 2. Двусвязный список, кольцевой двусвязный список
- •4. Рекурсивные алгоритмы
- •4. 1. Деревья, бинарные деревья, представление деревьев
- •4. 2. Основные операторы, используемые для работы с деревьями
- •4. 3. Алгоритм создания дерева бинарного поиска
- •4. 4. Прохождение бинарных деревьев
- •1. Прохождение в прямом порядке
- •3. Прохождение в обратном порядке
- •4. 5. Когда рекурсию использовать не нужно
- •4. 6. Рекурсивные программы, примеры
- •5. Поиск
- •5. 1. Линейный поиск
- •5. 2. Двоичный поиск
- •5. 3. Индексно-последовательный поиск
- •5. 3. Поиск в таблице
- •5. 4. Поиск прямой строки
- •Поиск по бинарному дереву
- •Алгоритм кнута, Морриса и Пратта
- •5. 6. Алгоритм Боуера и Мура
- •Сортировка. Необходимые определения и классификация сортировок. Сортировки прямого включения и выбора. Их эффективность Необходимые определения и классификация сортировок.
- •Сортировка методом прямого включения
- •Эффективность алгоритма сортировки прямого включения
- •Сортировка методом прямого выбора
- •Эффективность алгоритма сортировки прямого выбора
- •Сортировка прямого обмена. Её эффективность
- •Эффективность алгоритма сортировки прямого обмена
- •Улучшенные методы сортировки. Быстрая сортировка. Её эффективность.
- •Быстрая сортировка
- •Принцип работы быстрой сортировки
- •Пример работы быстрой сортировки
- •Блок-схема быстрой сортировки
- •Улучшенные методы сортировки. Сортировка шелла. Её эффективность. Сортировка шелла
- •Принцип работы сортировки шелла и необходимые расчёты для её реализации
- •Пример расчёта последовательности расстояний для малых массивов
- •Пример работы сортировки шелла
- •Принцип работы пирамидальной сортировки
- •Пример работы пирамидальной сортировки
- •Представление графов
- •Нахождение кратчайших путей между парами вершин
Эффективность алгоритма сортировки прямого обмена
Максимальное число сравнений cmax=n(n-1)/2, а их порядок о(n2). Тогда число перемещений мmax=3cmax=3n(n-1)/2 с порядком о(n2). Если массив уже отсортирован и применяется алгоритм с флажком, то за один проход получаем минимальное число сравнений cmin =n-1, порядок о(n), а перемещения вообще отсутствуют.
Сравнительный анализ прямых сортировок показывает, что обменная сортировка в классическом виде представляет собой нечто среднее между сортировками с помощью включений и с помощью выбора. Если же в нее внесены приведенные выше усовершенствования, то для достаточно упорядоченных массивов пузырьковая сортировка даже имеет преимущество.
Улучшенные методы сортировки. Быстрая сортировка. Её эффективность.
Простые сортировки имеют сложность порядка n2, а алгоритмы улучшенных сортировок обладают общей сложностью примерно n*logn.
Если сортируются данные небольшого объёма, то эффективность улучшенных сортировок не заметна. Выгода от улучшенных сортировок становится ощутима во время сортировки данных больших объёмов. Поэтому, если необходимо отсортировать данные объёмом большим чем 100 элементов, то лучше взять один из алгоритмов улучшенной сортировки.
Быстрая сортировка
Алгоритм сортировки к. Хоара использует несколько иной механизм выбора значений для обменов, чем обычный алгоритм «пузырька», и называется сортировкой с разделением или быстрой сортировкой. В отличие от «пузырька», в быстрой сортировке производят обмены элементов на больших расстояниях для достижения наибольшей эффективности. Поэтому быстрая сортировка – это улучшенный метод, основанный на обмене.
Самый простой случай для быстрой сортировки – когда n элементов массива расположены в обратном порядке. Данные можно отсортировать, выполнив всего n/2 обменов, если сначала поменять местами самый левый и самый правый элементы и так далее, постепенно продвигаясь с двух сторон к середине.
Принцип работы быстрой сортировки
Данные сортируем по возрастанию. Сначала среди данных выбирается элемент x, относительно которого будут производиться следующие действия. Просматриваем данные, двигаясь слева направо, пока не найдем элемент a[i]>x. Затем просмотрим массив справа налево, пока не найдем элемент a[j]<x. Далее меняются местами эти два элемента a[i] и a[j]. Этот процесс «просмотра с обменом» продолжается до тех пор, пока два просмотра не встретятся где-то в середине массива. После такого просмотра массив разделится на две части. Первая часть – это левая с элементами меньшими или равными x. А вторая часть – правая с элементами большими или равными x. Далее указанный выше процесс повторяется, но уже с первой частью данных, а потом и со второй. Этот процесс дробления частей с обменом элементами однотипен и применяется до тех пор, пока данные не будут отсортированы. Из-за этого применяется рекурсия.
Существуют разные способы выбора элемента x. Это может быть центральный элемент выбранной последовательности или её первый элемент. Можно провести исследование для определения наиболее эффективного место положения выбираемого x.