Быстрая сортировка — различия между версиями
Строка 3: | Строка 3: | ||
==Алгоритм== | ==Алгоритм== | ||
− | + | * Выбираем опорный элемент. | |
− | + | * Разбиваем массив таким образом, что все элементы меньшие или равные опорному будут лежать левее опроного элемента, а большие или равные правее. | |
− | + | * Рекурсивно сотрируем "маленькие" и "большие" элементы. | |
===Оптимизация глубины рекурсии до O(logn) в худшем случае=== | ===Оптимизация глубины рекурсии до O(logn) в худшем случае=== | ||
Строка 12: | Строка 12: | ||
Oh, boy, here we go! | Oh, boy, here we go! | ||
===Худшее время работы=== | ===Худшее время работы=== | ||
+ | Обозначим худшее время работы за <tex>T(n)</tex>. Получим рекуррентное соотношение | ||
+ | <tex>T(n) = Max(T(q-1)+T(n-q-1))+\Theta(n)</tex> | ||
+ | |||
+ | Предположим, что <tex>T(n) \leq cO(n^2)</tex>. Тогда получим | ||
+ | <tex>T(n) \leq Max(cq^2+c(n-q-1)^2)+\Theta(n) = | ||
+ | cMax(q^2+(n-q-1)^2)+\Theta(n)</tex> | ||
+ | <tex>Max(q^2+(n-q-1)^2) \leq (n-1)^2</tex> | ||
+ | |||
+ | <tex>T(n) \leq cn^2 - c(2n-1) + \Theta(n) \leq cn^2</tex> | ||
+ | Таким образом <tex>T(n) = O(n^2) | ||
===Среднее время работы=== | ===Среднее время работы=== | ||
Версия 21:06, 7 июня 2011
Эта статья находится в разработке!
Быстрая сортировка(qsort, сортировка Хоара) - один из самых известных и широко используемых алгоритмов сортировки. В худшем случае работает за
, среднее время работы , что является асимптотически оптимальным временем работы для алгоритма, основанного на сравнении.Содержание
Алгоритм
- Выбираем опорный элемент.
- Разбиваем массив таким образом, что все элементы меньшие или равные опорному будут лежать левее опроного элемента, а большие или равные правее.
- Рекурсивно сотрируем "маленькие" и "большие" элементы.
Оптимизация глубины рекурсии до O(logn) в худшем случае
В случае повторяющихся неудачных разбиений опорным элементом, глубина рекурсии может достичь
. Этого можно избежать, если в цикле разбивать массив, но рекурсивно вызываться только от части, содержащей меньшее число элементов, а большую часть продолжать разбивать в цикле.Асимптотика
Oh, boy, here we go!
Худшее время работы
Обозначим худшее время работы за
. Получим рекуррентное соотношениеПредположим, что
. Тогда получим
Таким образом <tex>T(n) = O(n^2)
Среднее время работы
Ссылки
http://ru.wikipedia.org/wiki/Быстрая_сортировка
http://en.wikipedia.org/wiki/Quicksort
Так как некий ленивый за***нец не собирается делать вики-конспект я его внаглую беру себе =^-^=.