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 |
Метод Шелла |