Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одесса / Iнформатика / Сортировка.doc
Скачиваний:
8
Добавлен:
10.02.2016
Размер:
439.81 Кб
Скачать

Быстрая сортировка

Быстрая сортировка (quick sort) - это рекурсивный алгоритм, который ис-

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

нужно отсортировать, имеет некоторый минимальный размер, процедура быстрой

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

сортировки.

Исходная версия рассматриваемого алгоритма быстрой сортировки весьма

проста. Если алгоритм вызывается для подсписка, содержащего нуль или один

элемент, подсписок уже отсортирован и процедура заканчивается. В противном

случае процедура выбирает элемент списка и использует его для разбиения спис-

ка на два подсписка. Она помещает элементы, которые меньше, чем разделяющий

элемент, в первый подсписок, а оставшиеся элементы - во второй подсписок. За-

тем она рекурсивно вызывает себя для сортировки обоих подсписков.

Существует много способов выбора разделительного элемента. Программа мо

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

Но может случиться так, что им окажется наименьший или наибольший элемент

списка. При этом один подсписок будет намного больше другого, и в случае большо-

го количества неудачных выборов, что приведет к сложности алгоритма О(N2) и вы-

зовет глубокую рекурсию.

Другой вариант состоит в том, чтобы просматривать список, вычислять сред-

нее арифметическое всех значений и использовать его как разделитель. Этот под-

ход обычно дает неплохие результаты, но требует много дополнительной работы.

Еще один проход со сложностью порядка O(N) не изменит теоретическое время

выполнения алгоритма, но снизит общую производительность.

Третья стратегия заключается в том, чтобы выбрать средний из элементов в на-

чале, конце и середине списка. Этот метод обладает значительным преимущество

в скорости, так как потребуется выбрать только три элемента. Кроме того, гаранти-

руется, что выбранный элемент не обязательно будет самым большим или самым

маленьким элементом и скорее всего окажется где-нибудь в середине списка.

Сортировка слиянием

Как и быстрая сортировка, сортировка слиянием (merge sort) - это рекурсив-

ный алгоритм. Он так же делит список на два подсписка и рекурсивно их сортирует.

Сортировка слиянием делит список пополам, чтобы сформировать два под-

списка равного размера. Затем подсписки рекурсивно сортируются и сливаются,

образуя полностью отсортированный список.

Кроме того, что процесс объединения несложно понять, это также наиболее ин-

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

Сортировка слиянием выполняется немного медленнее, чем быстрая сортиров-

ка.

Преимущество сортировки слиянием в том, что время работы остается од-

ним и тем же для различных представлений данных и начального распределе-

ния. Если в списке имеется много дублированных значений, то быстрая сорти-

ровка имеет время работы O(N2) и входит в глубокую рекурсию. Если список

большой, то алгоритм может переполнить стек и вызвать аварийную остановку.

Поскольку сортировка слиянием всегда делит список на равные части, она ни-

когда не входит в глубокую рекурсию. Для списка из N элементов сортировка

слиянием достигает глубины рекурсии всего log(N).

Соседние файлы в папке Iнформатика