Диплом, курсовая, контрольная работа
Помощь в написании студенческих работ

Быстрая сортировка. 
Классика алгоритмизации

РефератПомощь в написанииУзнать стоимостьмоей работы

На практике массив обычно делят не на три, а на две части: например, «меньшие опорного» и «равные и большие»; такой подход в общем случае эффективнее, так как упрощает алгоритм разделения. Время работы алгоритма быстрой сортировки зависит от степени сбалансированности разбиения. Сбалансированность, в свою очередь, зависит от того, какой элемент выбран в качестве опорного. При суммировании… Читать ещё >

Быстрая сортировка. Классика алгоритмизации (реферат, курсовая, диплом, контрольная)

Общая идея алгоритма состоит в следующем:

Выбрать из массива элемент, называемый опорным.

Сравнить все остальные элементы с опорным и переставить их в массиве так, чтобы разбить массив на три непрерывных отрезка, следующие друг за другом: «меньшие опорного», «равные» и «большие».

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

Быстрая сортировка. Классика алгоритмизации.

На практике массив обычно делят не на три, а на две части: например, «меньшие опорного» и «равные и большие»; такой подход в общем случае эффективнее, так как упрощает алгоритм разделения.

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

Наихудшее поведение алгоритма быстрой сортировки имеет место в случае, когда подпрограмма, выполняющая разбиение, порождает подзадачу с n-1 элементами, а вторую — пустую, то есть при каждом рекурсивном вызове больший массив будет на 1 короче, чем в предыдущий раз. Такое может произойти, если в качестве опорного на каждом этапе будет выбран элемент либо наименьший, либо наибольший из всех обрабатываемых. Предположим, что такое несбалансированное разбиение возникает при каждом рекурсивном вызове. Для выполнения разбиения требуется время и (n). Поскольку рекурсивный вызов процедуры разбиения, на вход которой подается массив размером 0 приводит к немедленному возврату из этой процедуры, то.

T (0) = и (1).

Таким образом, общее время работы в худшем случае:

T (n)=T (n-1)+T (0)+и (n)=T (n-1)+и (n).

При суммировании промежутков времени, затрачиваемых на каждый уровень рекурсии, получается арифметическая прогрессия, что приводит к результату и (n2).

В наилучшем же случае при каждой операции разделения массив делится на две почти одинаковые части, следовательно, максимальная глубина рекурсии, при которой размеры обрабатываемых подмассивов достигнут 1, составит log2?n. В результате количество сравнений, совершаемых быстрой сортировкой, было бы равно значению рекурсивного выражения.

T (n)=2T (n/2)+и (n),.

что даёт общее время выполнения алгоритма.

T (n)=n*log2?n.

Достоинства:

Один из самых быстродействующих алгоритмов сортировки общего назначения.

Прост в реализации.

Не требует большого количества дополнительной памяти Недостатки:

Прямая реализация в виде функции с двумя рекурсивными вызовами может привести к ошибке переполнения стека.

Сортировка пузырьком

Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются n-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции, как пузырёк в воде, отсюда и название алгоритма).

Имеет квадратичный порядок роста и (n2).

Показать весь текст
Заполнить форму текущей работой