- •2003-2004 Программирование. 1 курс. Лектор: доцент Певзнер л.В.
- •5.9. Сортировка и поиск
- •5.9.1. Сортировка
- •А. Сортировка выбором
- •B. Сортировка включением
- •C. Сортировка обменом
- •D. Сортировка слиянием
- •E. Внешняя сортировка
- •5.9.2. Поиск
- •5.9.3. Примеры сортировок
- •A. Пример сортировки выбором
- •B. Пример сортировки включением
- •C. Пример сортировки обменом
- •D. Пример сортировки слиянием
2003-2004 Программирование. 1 курс. Лектор: доцент Певзнер л.В.
Тема:"Сортировка
и поиск"
5.9. Сортировка и поиск
5.9.1. Сортировка
Сортировкой называется процесс упорядочения информации по определенному критерию, например, по возрастанию или по убыванию ключей, по алфавиту и т.п.
Рассмотрим различные методы сортировки:
Сортировка выбором
Сортировки включением.
Сортировка обменом
Сортировка слиянием
Внешняя сортировка
При построении двоичного дерева по набору признаков мы также использовали алгоритм сортировки (упорядочение дерева по набору признаков - влево, вправо и т.п.).
Рассмотрим несколько алгоритмов сортировки. Прежде всего, отметим, что все описанные алгоритмы сортировки называются алгоритмами внутренней сортировки, так как предполагается, что все упорядочение осуществляется в оперативной памяти. Одно из основных требований к методам сортировки это экономия памяти.
При экономии памяти не рекомендуется формировать вспомогательные массивы, которые будут использовать дополнительную память.
Второе требование к методам сортировки – это повышение быстродействия алгоритма.
А. Сортировка выбором
Дано: Множество элементов М={M[1], M[2], …, M[n]}.
Необходимо: Упорядочить это множество по убыванию (по возрастанию действия будут выполняться по аналогичной схеме).
Схема сортировки следующая:
Пусть i – номер элемента в массиве М. На первом шаге i=1.
Найти максимальный элемент в множестве М[i], M[i+1], …, M[n].
Поменять его местами с первым элементом М[i].
Увеличить i на единицу (то есть, i:=i+1).
Выполнять шаги 2-4 пор тех пор, пока i не станет равно n; в этом случае, на последнем месте будет находиться минимальный элемент.
Оценим данный алгоритм:
Шаги 1-2 будут повторяться: Если n – количество элементов в последовательности.
Сначала (n-1), потом (n-2), потом (n-3), … 2, 1 раз. То есть мы имем:
n-1+n-2+n-3+… +2+1=n(n-1)/2=(n2-n)/2
То есть оценка этого алгоритма сортировки == О((n2-n)/2).
B. Сортировка включением
Дано: Последовательность элементов М={M[1], M[2], …, M[n]}. Предположим, что она уже упорядочена. Включение в последовательность М нового элемента – это нахождение места размещения его в М.
Необходимо: Упорядочить эту последовательность по убыванию (по возрастанию действия будут выполняться по аналогичной схеме).
Схема сортировки следующая:
Пусть n – количество элементов в последовательности М.
Сначала n=0 (то есть последовательность М – пуста). i - индекс элементов в М, используется для нумерации элементов последовательности.
Взять m – добавляемый элемент.
Если n=0, то
просто поместить m в М на первое место; то есть M[1]:=m;
при этом количество элементов в М станет равно 1: n:=n+1 (=1).
Иначе (то есть, если n>0)
i:=1;
если m>M[i], то
сдвинуть элементы M[i], M[i+1], …, M[n] вправо, а на место M[i] записать элемент m;
n:=n+1 (то есть количество элементов увеличивается на 1);
перейти на выполнение шага 3;
иначе:
i:=i+1 (то есть перейти к следующему элементу);
если i>n, то:
записать m на место M[n+1];
n:=n+1 (то есть количество элементов увеличивается на 1);
перейти на выполнение шага 3.
5.3.3. иначе повторить шаги 5.2-5.3.
Выполнять шаги 2-4 пор тех пор, пока поступают новые элементы, добавляемые в последовательность М.
Оценка алгоритма сортировки включением:
Данный алгоритм сортировки требует О((n2-n)/2) операций сравнения.
Если здесь использовать метод двоичного поиска то сложность алгоритма будет О(n*Log2n) операций сравнения.