An array A consists of n integers in locations A[0], A[1] ….A[n-1]. It is required to shift the elements of the array cyclically to the left by k places, where 1 <= k <= (n-1). An incomplete algorithm for doing this in linear time, without using another array is given below. Complete the algorithm by filling in the blanks. Assume alt the variables are suitably declared.
min = n; i = 0; while (___________) { temp = A[i]; j = i; while (________) { A[j] = ________ j= (j + k) mod n ; If ( j< min ) then min = j; } A[(n + i — k) mod n] = _________ i = __________
(A) i > min; j!= (n+i)mod n; A[j + k]; temp; i + 1 ;
(B) i < min; j!= (n+i)mod n; A[j + k]; temp; i + 1;
(C) i > min; j!= (n+i+k)mod n; A[(j + k)]; temp; i + 1;
(D) i < min; j!= (n+i-k)mod n; A[(j + k)mod n]; temp; i + 1;
Answer: (D)
Explanation: In the five blanks given in the question, the last two blanks must be temp and i+1 because all the given options for the fourth and fifth blanks have temp and i+1.
Now, for the first blank, it must be i So, the first blank is i < min which implies either option (B) or option (D) is correct. Assume option (B) is correct then in the bracket of while we have j!=(n+i)modn That means whenever j becomes equal to (n+i)modn then control goes out of the while loop. Now (n+i)modn=i and j is always equal to i because in line 3 of the code we are assigning the value of i to j. So, if option (B) is true control never enters the second while loop but it has to enter the second while loop to shift the nos. K places left. Hence, option (D) is correct. Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Quiz of this Question