Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
к теме 5 - Сортировка и поиск.doc
Скачиваний:
0
Добавлен:
18.11.2019
Размер:
247.81 Кб
Скачать

2003-2004 Программирование. 1 курс. Лектор: доцент Певзнер л.В.

Тема:"Сортировка и поиск" 12

5.9. Сортировка и поиск

5.9.1. Сортировка

Сортировкой называется процесс упорядочения информации по определенному критерию, например, по возрастанию или по убыванию ключей, по алфавиту и т.п.

Рассмотрим различные методы сортировки:

  1. Сортировка выбором

  2. Сортировки включением.

  3. Сортировка обменом

  4. Сортировка слиянием

  5. Внешняя сортировка

При построении двоичного дерева по набору признаков мы также использовали алгоритм сортировки (упорядочение дерева по набору признаков - влево, вправо и т.п.).

Рассмотрим несколько алгоритмов сортировки. Прежде всего, отметим, что все описанные алгоритмы сортировки называются алгоритмами внутренней сортировки, так как предполагается, что все упорядочение осуществляется в оперативной памяти. Одно из основных требований к методам сортировки это экономия памяти.

При экономии памяти не рекомендуется формировать вспомогательные массивы, которые будут использовать дополнительную память.

Второе требование к методам сортировки – это повышение быстродействия алгоритма.

А. Сортировка выбором

Дано: Множество элементов М={M[1], M[2], …, M[n]}.

Необходимо: Упорядочить это множество по убыванию (по возрастанию действия будут выполняться по аналогичной схеме).

Схема сортировки следующая:

  1. Пусть i – номер элемента в массиве М. На первом шаге i=1.

  2. Найти максимальный элемент в множестве М[i], M[i+1], …, M[n].

  3. Поменять его местами с первым элементом М[i].

  4. Увеличить i на единицу (то есть, i:=i+1).

  5. Выполнять шаги 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]}. Предположим, что она уже упорядочена. Включение в последовательность М нового элемента – это нахождение места размещения его в М.

Необходимо: Упорядочить эту последовательность по убыванию (по возрастанию действия будут выполняться по аналогичной схеме).

Схема сортировки следующая:

  1. Пусть n – количество элементов в последовательности М.

  2. Сначала n=0 (то есть последовательность М – пуста). i - индекс элементов в М, используется для нумерации элементов последовательности.

  3. Взять m – добавляемый элемент.

  4. Если n=0, то

    1. просто поместить m в М на первое место; то есть M[1]:=m;

    2. при этом количество элементов в М станет равно 1: n:=n+1 (=1).

  1. Иначе (то есть, если n>0)

    1. i:=1;

    2. если m>M[i], то

      1. сдвинуть элементы M[i], M[i+1], …, M[n] вправо, а на место M[i] записать элемент m;

      2. n:=n+1 (то есть количество элементов увеличивается на 1);

      3. перейти на выполнение шага 3;

    3. иначе:

      1. i:=i+1 (то есть перейти к следующему элементу);

      2. если i>n, то:

        1. записать m на место M[n+1];

        2. n:=n+1 (то есть количество элементов увеличивается на 1);

        3. перейти на выполнение шага 3.

5.3.3. иначе повторить шаги 5.2-5.3.

  1. Выполнять шаги 2-4 пор тех пор, пока поступают новые элементы, добавляемые в последовательность М.

Оценка алгоритма сортировки включением:

Данный алгоритм сортировки требует О((n2-n)/2) операций сравнения.

Если здесь использовать метод двоичного поиска то сложность алгоритма будет О(n*Log2n) операций сравнения.