
- •Тезисы лекций
- •Тип данных
- •Лекция 2. Списки, стеки, очереди.
- •Поиск в массивах. Поиск в строке. Поиск в массивах
- •Сортировка с помощью прямого включения.
- •Сортировка с помощью двоичного включения.
- •Сортировка двумерных массивов
- •Лекция 8. Основные понятия рекурсии. Простейшие примеры реализации.
- •Когда не надо применять рекурсию.
- •Лекция 9. Рекурсия и кривые. Рекурсивная реализация
- •Лекция 10. Алгоритмы с возвратом.
- •Тема 3.3. Алгоритмы с возвратом.
- •Лекция 11. Данные с динамической структурой. Рекурсивная структура данных.
- •Лекция 11a. Классы
- •Лекция 12. Графы
- •Лекция 13. Частично упорядоченные множества. Топологическая сортировка.
- •Лекция 14. Определение дерева. Поддеревья, элементы дерева. Основные понятия и определения
- •Лекция 15. Поиск и включение для бинарных деревьев.
- •Рекомендуемая литература
Сортировка с помощью прямого включения.
Пусть имеется массив a1, a2,… ai-1,ai, … an . Его надо отсортировать в порядке возрастания.
Предположим, что a1, a2,… ai-1 уже отсортированы. Выбираем ai и двигаемся налево. Находим место, куда надо вставить ai. Сдвигаем все элементы с этого места до ai-1 включительно на один элемент вправо. На освободившееся место ставим ai. Таким образом, будут отсортированы уже a1, a2,… ai-1, ai элементы.
Процесс повторяем до тех пор, пока не будут отсортированы все элементы.
Сортировка с помощью двоичного включения.
Сортировку с помощью прямого включения можно улучшить, если учитывать, что элементы a1, a2,… ai-1 уже упорядочены. Поиск места включения можно осуществлять с помощью “поиска делением пополам”.
Сортировка двумерных массивов
Двумерные массивы обычно сортируются по строкам или по столбцам. Например, требуется расположить столбцы массива в порядке максимумов, содержащихся в них элементов.
Лекция 6.
Сортировка с помощью прямого выбора. Сортировка с помощью прямого обмена (пузырьковая сортировка).
Здесь рассматриваются:
Сортировка массивов чисел, массивов строк с помощью прямого обмена
Сортировка двумерных массивов пузырьковым методом.
Шейкерная сортировка.
Сортировка массива с помощью прямого выбора основана на следующих принципах:
1. Выбирается элемент с наименьшим ключом
2. Он меняется местами с первым элементом a[1]
3. Затем этот процесс повторяется с оставшимися n-1 элементами,
n-2 элементами, и так далее.
Сортировка массива с помощью прямого обмена (упорядочивание по возрастанию):
Сравниваем первый и второй элементы. Если первый элемент больше, то меняем элементы местами. Далее сравниваем второй и третий элементы. Если второй элемент больше третьего, то меняем элементы местами. И так далее до конца массива. В результате на последнем месте будет стоять наибольший элемент.
Повторяем пункт 1 над массивом на единицу меньшей длины (с 1-го по n-1 элементы). В результате в массиве на предпоследнем месте будет стоять второй по величине элемент.
И так далее…
Метод сортировки массива с помощью прямого обмена можно улучшить, меняя направления последовательных просмотров массива. Сначала продвигаем наименьший элемент справа налево, а затем наибольший элемент слева направо. Такая сортировка называется шейкерной.
Лекция 7.
Улучшенные методы сортировки. Сортировка с помощью разделения – быстрая сортировка (QuickSort).
. Имеется несколько улучшенных методов сортировки, основанных на принципах включения, выбора и обмена. Пузырьковая (принципы обмена) сортировка была самой неэффективной из трех рассмотренных методов. Улучшенный метод пузырьковой сортировки приводит к самому лучшему из известных в данный момент методов сортировки. Этот метод называется быстрой сортировкой (QuickSort).
В этом методе используется принцип разделения:
Выбираем наугад из массива a какой-нибудь элемент x. Будем просматривать слева массив a до тех пор, пока не обнаружим элемент ai > x.
Затем будем просматривать массив a справа, пока не встретим aj < x.
Поменяем местами эти два элемента. Продолжим процесс просмотра и обмена, пока оба просмотра не встретятся где-то в середине массива.
В результате массив окажется разбитым на две части:
левую часть с ключами меньше или равными x
правую часть с ключами больше или равными x
Применим этот процесс к полученным двум частям массива. И будем повторять этот процесс до тех пор, пока каждая из частей не будет состоять из одного-единственного элемента.
Пример.
Рассмотрим один проход сортировки с помощью разделения
Лучше начинать сортировку, взяв элемент x в середине массива. Здесь
в качестве x выбран четвертый элемент массива (42). Меняются местами 44 и 18, 55 и 06.
исходный массив
44 55 12 42 94 06 18 67
результат одного прохода сортировки с помощью разделения
18 06 12 42 94 55 44 67
В директории block7 находится пример программы, выполняющей быструю сортировку (QuickSort) с помощью разделения. В программе дается два варианта:
в первом варианте написана рекурсивная процедура для выполнения прохода сортировки с помощью разделения. После выполнения прохода сортировки процедура обращается к себе же для сортировки левой и правой частей.
во втором варианте написана подобная процедура, но заменяющая рекурсию на итеративные шаги.