
1.6. Быстрая сортировка (сортировка Хоара)
В методе быстрой сортировки фиксируется какой - либо ключ (базовый), относительно которого все элементы с большим весом перебрасываются вправо, а с меньшим — влево. При этом весь список элементов делится относительно базового ключа на две части. Для каждой части процесс повторяется.
Поясним метод на примере.
На рис.10 представлен первый этап быстрой сортировки. В первой строке указана исходная последовательность.
Примем
первый элемент последовательности за
базовый ключ,
выделим его квадратом и обозначим
.
Установим два
указателя: i
и
j,
из которых i
начинает отсчет слева (i=
1), а
j
— справа (j
= п).
Сравниваем
базовый ключ
и текущий ключ
.
Если
,
то устанавливаем
и
проводим следующее сравнение
и
.
Продолжаем
уменьшать j
до тех пор, пока не достигнем
условия
.
После этого меняем местами ключи
и
(шаг 3 на рис. 10).
Рис.
10. Метод
Хоара
Теперь
начинаем изменять индекс
и сравнивать элементы
и
.
Продолжаем
увеличение i
до тех пор, пока не получим
условие
,
после
чего следует обмен
и
(см.
шаг 5). Снова возвращаемся к индексу j,
уменьшаем его. Чередуя уменьшение
j
и увеличение i,
продолжаем этот процесс с обоих концов
к середине до тех пор, пока не получим
(см.
шаг 7).
В отличие от
предыдущих рассмотренных сортировок
уже на •м этапе имеют место два факта:
во-первых, базовый ключ
занял
свое постоянное место в сортируемой
последовательности; во-вторых, все
элементы слева от
будут меньше него, а справа — больше
него. Таким образом, по окончании первого
этапа имеем:
-
21, 11, 32
40
57, 83, 75, 64
Левая часть
Правая часть
Указанная процедура сортировки применяется независимо к левой и правой частям.
Сложность
метода Хоара —
.
Индивидуальные задания
Написать программу для каждого из перечисленных методов сортировки. Алгоритмы сортировок должны быть оформлены в виде функции.
Вариант |
|
|
|
Составить программу |
1, 9 |
1000 |
4000 |
6000 |
Простая вставка |
2, 11 |
800 |
3000 |
7000 |
Сортировка слиянием |
3, 13 |
2000 |
5000 |
6800 |
Метод Шелла |
4, 15 |
1500 |
3500 |
6000 |
Простой выбор |
5, 16 |
1000 |
2800 |
8500 |
Метод Хоара |
6, 14 |
500 |
2500 |
6500 |
Бинарная вставка |
7, 12 |
900 |
3000 |
8500 |
Шейкерная сортировка |
8, 10 |
1200 |
2000 |
7500 |
Метод Шелла |