The Gateway to Computer Science Excellence
+31 votes

Consider the following C program that attempts to locate an element $x$ in an array $Y[ \ ]$ using binary search. The program is erroneous. 

 f (int Y[10] , int x) {
    int u, j, k;
    i= 0; j = 9;
    do {
        k = (i+ j) / 2;
        if( Y[k] < x) i = k;else j = k;
        } while (Y[k] != x) && (i < j)) ;
    if(Y[k] == x) printf(" x is in the array ") ;
    else printf(" x is not in the array ") ;

On which of the following contents of $Y$ and $x$ does the program fail? 

  1. $Y$ is $[1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 \ 10]$ and $x < 10 $  
  2. $Y$ is $[1 \ 3 \ 5 \ 7 \ 9 \ 11   \ 13 \ 15 \ 17 \ 19]$ and $x < 1 $ 
  3. $Y$ is $[2 \  2 \ 2 \ 2 \  2 \  2 \  2 \ 2 \ 2 \ 2]$ and $x > 2$ 
  4. $Y$ is $[2 \ 4 \ 6 \ 8 \ 10 \ 12 \ 14 \ 16 \ 18 \ 20]$ and $ 2 < x < 20$ and $x$ is even
in Algorithms by
edited by | 7.3k views
What happens with OPTION B of the second question?

somebody help me analyse?
Assume x=0..ultimately u will come out of the loop when while cdn will fail i. E i<j

Bcz at the last point i n j will be equal to 0th position...

After cmng out of while loop.. Progrm is terminated aftr printing x is not in the array..

Hope it helps..

4 Answers

+34 votes
Best answer

for Q.84 

when it is option C the control will continue to iterate as $i=8$ and $j=9$;
again and again $i$ will be assigned $k$ which itself equals $8$ as $\frac{8+9}{2}$ being stored in an integer type variable, will evaluate to $8$.

For option A, with $x=9$, $k$ will take the following values:

  • $4$
  • $6$
  • $7$
  • $8 - y[8] = 9$, $x$ found

For option D, with $x=10$, $k$ will take the following values:

  • $4$, $y[4] = 10$, $x$ found
edited by

please explain the difference between

if (Y[k] < x) i = k + 1; else j = k-1; 

if (Y[k] < x) i = k - 1; else j = k +1; 
But the same index 8 problem will also arise for option (a), when you are searching for say x=9.. Can somebody explain dat plz?
As I solved for option D, with $$x=10$$, the code seems to go in infinite loop. So option D is also incorrect. Please correct me if I am wrong.
for x = 10 in option D, it will find k = (0 + 9)/2 = 4 and Y[4] = 10. the while loop will exit, giving you the answer. There is no infinite loop in that.
0  is this question same .what is the difference between these two?

@arjun sir

but same problelm arises with option b if x=0 which is not present then we will no get any result.then b and c both should be wrong.why we are only seeing c option?

In option B, i and j both become equal to 0 at the last iteration and hence we break out of the while loop.

+12 votes
 do {
        k = (i+ j) / 2;
        if( Y[k] < x) i = k;else j = k;
    } while (Y[k] != x) && (i < j)) ;

Here i=k and j=k creates the problem.

just do i=k+1 and j=k-1

when we search the elements which is not in array and that element in the range of first and last element  results infinite looping. that is unsuccessful search and range should be inbetween first and last.

another problem when searching last element and greater than of last element.

edited by
+4 votes
84. The answer is C.

Binary search fails if all the elements are same.

85. The answer is A.
How binary search fails when all elements are same?
The errorfull nature of this program is not related with "what type of elements are stored in array" .the error is regarding "what element we want to search..if the element we want to search is more than or equal to last element of array,it will cause problem as program will never terminate ..
If all elements are equal then searching element should be greater than the array just that case it should just exactly greater..
+3 votes
For binary search there are two necessary conditions:

1.Array should be sorted.

2.All the elements in the array should be distinct.

for Ques.84 option c is correct

The second one is not a requirement. It happens here just because code is wrong. See

Explanation: The above program doesn’t work for the cases where element to be searched is the last element of Y[] or greater than the last element (or maximum element) in Y[]. For such cases, program goes in an infinite loop because i is assigned value as k in all iterations, and i never becomes equal to or greater than j. So while condition never becomes false. So ans is option :C
@Arjun sir  why second condition is not necessary for binary search (distinct element) please explain in detail.
becouse if all elements same

ex. 2,2,2,2,2

and if you want to search 2 with binary search you will get in the 1 phase itself

and if you search other than the element present in the array

obiviously  you will get false simple

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true
52,345 questions
60,471 answers
95,275 users