Confundido sobre la complejidad temporal de los bucles anidados y buscando consejos
Digamos que tengo dos códigos:
Código A:
for i = 0;
for j = 0;
while(i<n){ // O(n)
while(j<n){ // O(n)
printf("hello");
.....
Tiempo de ejecución = o (n) x O (n) = O (n ^ 2) ..
Código B:
int result = 0;
int i = 0;
while (i < n/2){ //O(n)
result += arr[i];
i += 1;
while(i >= n/2 && i < n){ //O(n)
results += arr[i];
i +=1;
}
Tiempo de ejecución = O (n)
¿Cómo es que para el Código B NO MULTIPLICAMOS los dos O (n) para obtener O (n ^ 2) como lo hicimos para el Código A? Muy confundido acerca de cómo determinar los tiempos de ejecución.