Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_6_условие.docx
Скачиваний:
3
Добавлен:
12.07.2022
Размер:
84.39 Кб
Скачать

1.2. Сортировка методом поиска минимума (максимума)

В данной сортировке используется методика поиска минимума (если упорядочить надо по возрастанию) или максимума (если упорядочить надо по убыванию) среди элементов массива.

Основная идея алгоритма следующая: на i-м шаге итерации среди элементов массива a[i]…a[n] ищется минимальный (максимальный) элемент массива и меняется местами с a[i]. На следующем шаге i увеличивается на единицу, и процедура поиска повторяется. Всего надо сделать n-1 итераций, где n – число элементов массива.

Подобный алгоритм сортировки можно представить следующим образом:

ЦИКЛ ДЛЯ I=0 ДО N-1

MIN = A[I]

ЦИКЛ ДЛЯ J=I+1 ДО N

ЕСЛИ MIN > A[J] ТО

MIN = A[J], ОБМЕН A[J], A[I]

СЛЕДУЮЩЕЕ J

СЛЕДУЮЩЕЕ I

1.3. Сортировка методом вставки

Сортировка вставками – алгоритм сортировки, в котором элементы входной последовательности просматриваются по одному, и каждый следующий просматриваемый элемент размещается в подходящее место среди ранее упорядоченных элементов. Перераспределение элементов может происходить как в рамках заданного набора данных, так и во вновь выделяемой памяти. Но на практике почти всегда используется первый подход. Наиболее понятно метод {\displaystyle O(n^{2})}Щ()объясняется графически, как показано на рисунке ниже

Сортировка вставками наиболее эффективна, когда массив уже частично отсортирован или когда элементов массива не много. Если же элементов меньше 10, то данный алгоритм часто вообще является лучшим. Поэтому он часто используется в качестве вспомогательного для сортировки последовательностей в более сложных алгоритмах.

Подобный алгоритм сортировки можно представить следующим образом:

ЦИКЛ ДЛЯ I=0 ДО N

KEY = A[I]

J = I - 1

ПОКА (J>=0 И A[J]>KEY)

A[J+1] = A[J]

J = J – 1

A[J+1] = KEY

КОНЕЦ ПОКА

СЛЕДУЮЩЕЕ I

1.4. Сортировка методом Шелла

При сортировке Шелла сначала сравниваются и сортируются между собой значения, стоящие один от другого на некотором расстоянии А{\displaystyle d}. После этого процедура повторяется для некоторых меньших значений {\displaystyle d}А, а завершается сортировка Шелла упорядочиванием элементов при {\displaystyle d=1}А=1 (то есть обычной сортировкой вставками например). Эффективность сортировки Шелла в определённых случаях обеспечивается тем, что элементы «быстрее» встают на свои места (в простых методах сортировки, например, пузырьковой, каждая перестановка двух элементов уменьшает количество инверсий в списке максимум на 1, а при сортировке Шелла это число может быть больше).

Невзирая на то, что сортировка Шелла во многих случаях медленнее, чем быстрая сортировка, она имеет ряд преимуществ:

– отсутствие потребности в памяти под стек;

– отсутствие деградации при неудачных наборах данных.

Среднее время работы алгоритма зависит от длин промежутков — {\displaystyle d}А, на которых будут находиться сортируемые элементы исходного массива ёмкостью {\displaystyle N}N на каждом шаге алгоритма. Существует несколько подходов к выбору этих значений. Каноническим является подход, предложенный Шеллом a1=N/2, a2=a1/2, …, aK=1.

В качестве вспомогательной сортировки методом Шелла можно использовать сортировку вставками.

Пример сортировки Шелла

Рассмотрим следующий алгоритм сортировки массива a[0].. a[15].

1. Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]), ... , (a[7], a[15]).

2. Потом сортируем каждую из четырех групп по 4 элемента (a[0], a[4], a[8], a[12]), ..., (a[3], a[7], a[11], a[15]).

В нулевой группе будут элементы 4, 12, 13, 18, в первой - 3, 5, 8, 9 и т.п.

3. Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14]).

4. В конце сортируем вставками все 16 элементов.

Очевидно, лишь последняя сортировка необходима, чтобы расположить все элементы по своим местам. Так зачем нужны остальные?

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

Единственной характеристикой сортировки Шелла является приращение - расстояние между сортируемыми элементами, в зависимости от прохода. В конце приращение всегда равно единице - метод завершается обычной сортировкой вставками, но именно последовательность приращений определяет рост эффективности.

Использованный в примере набор ..., 8, 4, 2, 1 - неплохой выбор, особенно, когда количество элементов - степень двойки.