При вычислении этого типа сложности вам следует добавить встроенных или последовательных функций и умножить вложенных функций.
Например, это будет O(n)
:
// O(n) + O(n) = O(2n)` which is `O(n)` (as constants are removed)
for (int i = 0; i < n; i++)
{
/* something constant */
}
for (int j = 0; j < n; j++)
{
/* something constant */
}
Но когда функции вложены, умножьте их сложность:
// O(n) * O(n) = O(n^2)
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
/* something constant */
}
}
Ваш пример - комбинация - у вас есть несколько последовательных операций, вложенных в другую функцию.
// this is O(n*logn) + O(n), which is O(n*logn)
*some function that runs in O(n*log(n))*
for(int b = 0; b < n; b++)
{
*do something in constant time*
}
// multiplying this complexity by O(n)
// O(n) * O(n*logn)
for(int a = 0; a < n; a++)
{
// your O(n*logn)
// your b loop
}