Пусть n будет длиной массива. Это l oop имеет наихудшее время работы O (n ^ 2). Вот простой способ увидеть это:
Когда next = 1, количество операций, выполняемых while l oop, не больше 1. Когда next = 2, количество операций не больше 2 и так далее, пока next = (n - 1). Мы можем игнорировать другие операции, выполняемые for l oop, потому что они представляют собой члены более низкого порядка, которые не имеют отношения к росту.
Итак, теперь количество операций равно k * (1 + 2 + 3 + 4 + ... + (n - 1)) = k * (n * (n - 1) / 2) = k n ^ 2 - k n / 2, где k - постоянный коэффициент.
Следовательно, рост функции имеет порядок n ^ 2.
Редактировать:
Чтобы ответить на комментарий, мы обычно не учитываем всего количество инструкций, потому что для этого нет стандарта.
Например, будете ли вы считать одну итерацию следующего l oop одним оператором (одним оператором печати) или двумя операторами (оператором печати и увеличением i)?
for (int i = 0; i < n; i++)
{
print(i);
}
Вдобавок это откровенно не очень полезный метри c. В большинстве случаев нас интересует только член алгоритма наивысшего порядка.
Однако, чтобы ответить на ваш вопрос, я бы посчитал l oop как выполнение этих многих операторов: 2n ^ 2 + 2n - 3 .