Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. В 2 ч. Ч. 2.pdf
Скачиваний:
0
Добавлен:
24.11.2025
Размер:
1.34 Mб
Скачать

обменяем ai и aj . Продолжаем просмотр далее от позиции i+1 до j-1. Выполняем такой поиск до тех пор, пока два просмотра не встретятся.

Пример

Пусть в следующем примере: 55, 12, 42, 94, 06, 18, 44, 67 опорный элемент равен 42. Получим такую последовательность перемещений:

55, 12, 42, 94, 06, 18, 44, 67;

18, 12, 42, 94, 06, 55, 44, 67;

18, 12, 06 | 94, 42, 55, 44, 67.

Дальше просмотр слева направо заканчивается на элементе 94, а справа налево на элементе 6. Они не обмениваются. Получили две части последовательности:

в одной числа меньшие, чем x;

во второй числа не меньшие, чем x.

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

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

9.3.1.Сортировка простым включением

Идея: элементы условно разделяются на готовую последовательность a1, a2 , ..., ai 1 и входящую последовательность ai ,..., an . На каждом шаге, начиная с i=2,3,…, берут ai и вставляют его на подходящее место в готовую последовательность.

Готовая последовательность a1, a2 , ..., ai 1 упорядочена в порядке роста.

Элемент x нужно вставить в нее, не нарушая порядок, например, «просеять». Заметим, что «просеивание» может закончиться при двух условиях:

найден элемент a j такой, что a j < x a j+1 , 1 j i 1;

достигли левого конца готовой последовательности.

135

Когда становится ясно, куда нужно вставить элемент x, нужно освободить для него место, перемещая элементы a j+1,..., ai1 на шаг вправо. Отметим, что это перемещение можно выполнять сразу при сравнении.

9.3.2. Сортировка бинарными вставками

Идея: можно получить улучшение предыдущего алгоритма, если поиск места вставки элемента x проводить бинарными делениями.

9.3.3. Сортировка Шелла

Следующий алгоритм представляет собой сортировку включениями с уменьшающимся приращением.

Идея: Сначала отдельно группируются и сортируются все элементы, которые отстоят один от другого на 4 позиции. Это четвертная сортировка (выполняем, пока не упорядочим). Дальше – двоичная сортировка (сортируются элементы, которые отстоят на дистанции 2; выполняем до упорядочения). На последнем проходе – обычная сортировка (одинарная).

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

Пример

Над следующим массивом выполним четвертную сортировку:

44, 55, 12, 42, 94, 18, 06, 67.

Результатом будет такой массив:

44, 18, 06, 42, 94, 55, 12, 67.

Выполним двоичную сортировку и получим следующий массив:

06, 18, 12, 42, 44, 55, 94, 67.

Выполним одинарную сортировку и получим полностью отсортированный массив:

06, 12, 18, 42, 44, 55 67, 94.

Заметим, что продвижение «легкого» элемента вперед идет довольно быстрыми темпами.

136