C++
1. f(int Y[10], int x) {2. int i, j, k;3. i = 0; j = 9;4. do {5. k = (i + j) /2;6. if( Y[k] < x) i = k; else j = k;7. } while(Y[k] != x && i < j);8. if(Y[k] == x) printf ("x is in the array ") ;9. else printf (" x is not in the array ") ;10. } |
In the above question, the correction needed in the program to make it work properly is (GATE CS 2008)
(A)
Change line 6 to: if (Y[k] < x) i = k + 1; else j = k-1;
(B)
Change line 6 to: if (Y[k] < x) i = k – 1; else j = k+1;
(C)
Change line 6 to: if (Y[k] <= x) i = k; else j = k;
(D)
Change line 7 to: } while ((Y[k] == x) && (i < j));
Answer: (A)
Explanation:
Below is the corrected function
f(int Y[10], int x) {
int i, j, k;
i = 0; j = 9;
do {
k = (i + j) /2;
if( Y[k] < x) i = k + 1; else j = k - 1;
} while(Y[k] != x && i < j);
if(Y[k] == x) printf (\"x is in the array \") ;
else printf (\" x is not in the array \") ;
}
Reference: http://en.wikipedia.org/wiki/Binary_search_algorithm#Implementations
Hence Option(A) is the correct option.
Quiz of this Question
Please comment below if you find anything wrong in the above post

… [Trackback]
[…] Info to that Topic: geeksforgeeks.org/algorithms-searching-question-6/ […]
… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/algorithms-searching-question-6/ […]
… [Trackback]
[…] Read More here on that Topic: geeksforgeeks.org/algorithms-searching-question-6/ […]
… [Trackback]
[…] There you can find 45522 additional Information on that Topic: geeksforgeeks.org/algorithms-searching-question-6/ […]
… [Trackback]
[…] There you can find 12597 more Information to that Topic: geeksforgeeks.org/algorithms-searching-question-6/ […]