Open In App

GATE | GATE-CS-2006 | Question 53

Like Article
Like
Save
Share
Report

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. 

C




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++];
}


Which of the following condition(s) hold(s) after the termination of the while loop? (GATE CS 2006) (i) j < m, k = n+j-1, and a[n-1] < b[j] if i = n (ii) i < n, k = m+i-1, and b[m-1] <= a[i] if j = m

(A)

only (i)

(B)

only (ii)

(C)

either (i) or (ii) but not both

(D)

neither (i) nor (ii)


Answer: (D)

Explanation:

The function xyz() is similar to merge() of mergeSort().Both the conditions (i) and (ii) are false in the sections k = n+j-1 and k = m+i-1 respectively.

The while loop adds elements from a and b (whichever is smaller) to c and terminates when either of them exhausts. So, when the 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, the number of elements in c would be n+j and hence k=n+j.

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

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

Same as http://geeksquiz.com/c-arrays-question-5/


Quiz of this Question
Please comment below if you find anything wrong in the above post


Last Updated : 28 Jun, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads