Наилучшим случаем является Theta (n), например, для отсортированного массива. Худший случай - тета (n ^ 2 log n).
Верхняя граница
Вторичные подзадачи имеют отсортированный массив, которому предшествует или следует произвольный элемент. Это O (n log n). Если перед этим мы выполняем O (n) работу, решаем вторичную подзадачу в первой половине, а затем во второй половине, а затем делаем O (n) больше работы - O (n log n). Если получилось, выполнить O (n), отсортировать уже отсортированную первую половину (O (n)), решить вторичную подзадачу во второй половине, выполнить O (n), решить вторичную подзадачу в первой половине, отсортировать вторая половина уже отсортирована (O (n)), работа O (n) - O (n log n).
Теперь, в общем случае, мы решаем две первичные подзадачи на двух половинах, а затем медленно обмениваемся элементами через свод, используя вторичные вызовы. Необходимы обмены O (n), поэтому прямое применение основной теоремы дает оценку O (n ^ 2 log n).
Нижняя граница
Для k> = 3 мы строим массив A (k) размером 2 ^ k рекурсивно, используя приведенный выше анализ в качестве руководства. Плохие случаи - это массивы [2 ^ k + 1] + A (k).
Пусть A (3) = [1, ..., 8]. Этот отсортированный базовый случай удерживает Reverse
от вызова.
При k> 3 пусть A (k) = [2 ^ (k-1) + A (k-1) [1], ..., 2 ^ (k-1) + A (k-1) ) [2 ^ (k-1)]] + A (k-1). Обратите внимание, что основные подзадачи из [2 ^ k + 1] + A (k) эквивалентны [2 ^ (k-1) + 1] + A (k-1).
После первичных рекурсивных вызовов массив [2 ^ (k-1) + 1, ..., 2 ^ k, 1, ..., 2 ^ (k-1), 2 ^ k + 1 ]. Существуют элементы Omega (2 ^ k), которые должны перемещать позиции Omega (2 ^ k), и каждый из вторичных вызовов, которые перемещают элемент до сих пор, имеет подзадачи, отсортированные O (1), и, таким образом, является Omega (n log n).
Очевидно, что требуется больше кофе - первичные подзадачи не имеют значения. Это облегчает анализ среднего случая , который также равен Theta (n ^ 2 log n) .
С постоянной вероятностью, первая половина массива содержит, по крайней мере, половину наименее квартиля и, по крайней мере, половину наибольшего квартиля. В этом случае, независимо от того, происходит ли Reverse
, существуют элементы Omega (n), которые должны перемещать позиции Omega (n) посредством вторичных вызовов.