C | Arrays | Pregunta 5

Considere la siguiente función C en la que a[n] y b[m] son ​​dos arreglos de enteros ordenados y c[n + m] es otro arreglo de enteros.

void xyz(int a[], int b [], int c[])
{
  int i, j, k;
  i = j = k = O;
  while ((i<n) && (j<m))
     if (a[i] < b[j]) c[k++] = a[i++];
     else c[k++] = b[j++];
}

¿Cuál de las siguientes condiciones se cumple después de la terminación del ciclo while? (GATE CS 2006)
(i) j < m, k = n+j-1, y a[n-1] < b[j] si i = n (ii) i < n, k = m+i-1 , y b[m-1] <= a[i] si j = m
(A) solo (i)
(B) solo (ii)
(C) ya sea (i) o (ii) pero no ambos
(D) ni (i) ni (ii)

Respuesta: (D)
Explicación: La función xyz() es similar a merge() de mergeSort(). Ambas condiciones (i) y (ii) son falsas en las secciones k = n+j -1 yk = m+i-1 respectivamente.

El ciclo while agrega elementos de a y b (el que sea más pequeño) a c y termina cuando cualquiera de ellos se agota. Entonces, cuando el bucle termina, ya sea i=n o j=m.

Supongamos que i=n. Esto significaría que todos los elementos de la array a se agregan a c => k deben incrementarse en n. c también contendría elementos j de la array b. Entonces, el número de elementos en c sería n+j y por lo tanto k=n+j.

De manera similar, cuando j=m, k=m+i.

Por lo tanto, la opción (D) es correcta. (Si k hubiera comenzado desde −1 y no desde 0 y hubiéramos usado ++k dentro del bucle, la respuesta habría sido la opción (C))
Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *