Предположим, что в нашем распоряжении имеется процедура РАЗДЕЛЯЙ , которая по заданным значениям индексов , находит некоторое промежуточное значение и переставляет элементы сегмента так, чтобы для
выполнялось неравенство , а для — неравенство .
Тогда для сортировки сегмента
может быть использована рекурсивная процедура СОРТИРУЙ.
Для сортировки всего исходного массива достаточно выполнить оператор СОРТИРУЙ .
Заметим, что если бы процедура РАЗДЕЛЯЙ работала линейное от длины сегмента время и давала значение , близкое к середине между
и , то число обращений к ней приблизительно равнялось бы и сортировка всего массива проходила бы за время порядка . Однако можно доказать, что при естественной реализации эта оценка справедлива лишь в среднем.
Упражнения