+21 votes
3.5k views

Consider the following C-function in which $a[n]$ and $b[m]$ are two sorted integer arrays and $c[n+m]$ be another integer array,

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

Which of the following condition(s) hold(s) after the termination of the while loop?

1. $j< m,k=n+j-1$ and $a[n-1]< b[j]$ if $i=n$
2. $i<n,k=m+i-1$ and $b[m-1]\leq a[i]$ if $j=m$
1. only (i)
2. only (ii)
3. either (i) or (ii) but not both
4. neither (i) nor (ii)
asked
edited | 3.5k views

## 3 Answers

+55 votes
Best answer

The while loop adds elements from $a$ and $b$ (whichever is smaller) to $c$ and terminates when either of them exhausts. So, when loop terminates either $i = n$ or $j = m$.

Suppose $i = n$. This would mean all elements from array $a$ are added to $c => k$ must be incremented by $n$. $c$ would also contain $j$ elements from array $b$. So, number of elements in $c$ would be $n+j$ and hence $k = n + j$.

Similarly, when $j = m$, $k = m + i$.

Hence, option (D) is correct. (Had $k$ started from $-1$ and not $0$ and we used $++k$ inside loop, answer would have been option (C))

answered by Veteran (407k points)
edited
+1

Small correction

Similarly, when j = m, k = n + i.

Change n to m.

0
Thanks :)
0
@arjun sir . if we take same element in same index of both array . we can come to solution directly.

i took A[ 12 3] and B [1259] :).

Its very hard  for me to interpret the code by seeing :(
0
@arjun sir,

1) K1=K1++ or 2)K1=++K1

here in 1, 2 cases K value is different  but

generally just increment operation without assigning to any value will be same in both pre increment and post increment.

K++,   ++k

Am i wrong?
0

@Yashaswini Vanaja           yes in loops both are same

0
I understood like this - For $(i):$ $k$ is incremented after fillling $c$. So at the end of loop $k$ increments after filling $n-1 + j$ values which is $n+j$.
+24 votes
By Option Elimination

Take Array Contents

a={1} b={2} so n=1,m=1

Now A is small so it will copy to C then terminate in next iteration cz i<n no more holds So content of variables after while loop

c={1} , i=1,j=0,k=1,n=1,m=1

Check Condition i :->> (i==n) Yes. j<m holds but k=n+j-1 does not hold ,So Condition i is false.

Now Take Array Contents

a={2} b={1} so n=1,m=1

Now B is small so it will copy to C then terminate in next iteration cz j<m no more holds So content of variables after while loop

c={1} , i=0,j=1,k=1,n=1,m=1

Check Condition ii :->> (j==m) Yes. i<n holds but k=m+i-1 does not hold ,So Condition ii is false.

Neither condition holds Hence Option D is correct Ans.
answered by Boss (23.4k points)
edited
+2
thanks, good example :)
+8 votes

Option A and B are incorrect because j<m or i<n for loop termination.

From remaining C and D , k is no of elements added in c. it would either be n+j or m+i after loop terminates not n+j-1...

So D should be the correct answer

answered by Active (2.4k points)
Answer:

+10 votes
2 answers
1
+14 votes
2 answers
2
+42 votes
8 answers
3
+46 votes
8 answers
4
+10 votes
1 answer
5
+28 votes
4 answers
6
+15 votes
4 answers
7