Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиСД. Практикум (in dev).doc
Скачиваний:
148
Добавлен:
29.02.2020
Размер:
3.64 Mб
Скачать
    1. Быстрая сортировка (сортировка Хоара)

В методе быстрой сортировки фиксируется какой-либо ключ (базовый), относительно которого все элементы с большим весом перебрасываются вправо, а с меньшим – влево. При этом весь список элементов делится относительно базового ключа на две части. Для каждой части процесс повторяется.

Поясним метод на примере.

На рис.8 представлен первый этап быстрой сортировки. В первой строке указана исходная последовательность.

Примем первый элемент последовательности за базовый ключ, выделим его квадратом и обозначим k0 = 40. Установим два указателя : i и j, из которых i начинает отсчёт слева (i=1), а j – справа (j=n).

Сравниваем базовый ключ k0 и текущий ключ kj. Если k0<=kj, то устанавливаем j=j-1 и проводим следующее сравнение k0 и kj. Продолжаем уменьшать j до тех пор, пока не достигнем условия k0>kJ. После этого меняем местами ключи k0 и kj (шаг 3 на рис.8 ).

Номер шага

i j

Примечание

40

11

83

57

32

21

75

64

Исходный список

1

k0<kj

2

k0<kj

3

Обмен;

k0>kj

4

ki<k0

5

Обмен;

ki>k0

6

Обмен;

k0>kj

7

Обмен;

ki>k0

21

11

32

57

83

75

64

Полученный список

Рис. 8. Метод Хоара

Теперь начинаем изменять индекс i = i + 1 и сравнивать элементы ki и k0. Продолжаем увеличение i до тех пор, пока не получим условие ki > k0, после чего следует обмен ki и k0 (см.шаг5). Снова возвращаемся к индексу j, уменьшаем его. Чередуя уменьшение j и увеличение i, продолжаем этот процесс с обоих концов к середине до тех пор, пока не получим i = j (см.шаг 7).

В отличие от предыдущих рассмотренных сортировок уже на первом этапе имеют место два факта: во-первых, базовый ключ k0 = 40 занял своё постоянное место в сортируемой последовательности; во-вторых, все элементы слева от k0 будут меньше него, а справа- больше него. Таким образом, по окончании первого этапа имеем:

21, 11, 32 40 57, 83, 75, 64

левая часть правая часть

Указанная процедура сортировки применяется независимо к левой и правой частям.

Сложность метода Хоара O(n log2n).