Изменения

Перейти к: навигация, поиск
Нет описания правки
1.Все <tex>n</tex> элементов входного массива разбиваются на группы по пять элементов, в последней группе будет <tex>n</tex> <tex> mod</tex> <tex> 5</tex> элементов.
2.Выбираем Сначала сортируется каждая группа, затем выбираем медиану в каждой из этих групп.
3.Путем рекурсивного вызова шага 1 определяется медиана <tex>x</tex> из множества медиан, найденных на втором шаге. <tex>x</tex> - рассекающий элемент, <tex>i</tex> - индекс рассекающего элемента.(Если медиан окажется четное количество, то переменной <tex>x</tex> будет присвоено значение нижней медианы.)
4.Делим массив относительно рассекающего элемента <tex>x</tex>. Все элементы меньшие <tex>x</tex> будут находиться левее <tex>x</tex> в массиве и будут иметь меньший индекс и наоборот,если элементы больше <tex>x</tex>.
===Особенность алгоритма===
Как будет доказано ниже, время работы алгоритма в наихудшем случае равно <tex>O(n)</tex>. Главная идея алгоритма заключается в том, чтобы ''гарантировать'' хорошее разбиение массива, так как чисел, которые меньше рассекающего элемента не менее <tex>\frac{3n}{10}</tex>, где <tex>n</tex> количество элементов в массиве.
===Пример===
 
== Анализ времени работы алгоритма ==
Пусть <tex>T(n)</tex> - время работы алгоритма для <tex>n</tex> элементов, тогда оно не больше, чем сумма:
Анонимный участник

Навигация