I found the following logic for binary search from the standard book i feel it fails in some

/* binsearch: find x in v[0] <= v[1] <= ... <= v[n-1] */
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high) {
mid = (low+high)/2;
if (x < v[mid])
high = mid + 1;
else if (x > v[mid])
low = mid + 1;
else /* found match */
return mid;
}
return -1; /* no match */
}



#include <stdio.h>
int binsearch(int *v, int n, int x);
int main(void)
{
    int v[10]={2,5,9,12,15,17};
    int value=0;
    value = binsearch(v,6,2);
    if(value == -1)
    {
        printf("Element not found\n");
    }
    else
    {
        printf("element number is %d and the value is %d",value, v[value]);
    }
    return 0;
}

if i take the element as 2.

low high mid v[mid]

0 5 (0+5)/2 = 2 9 2 < 9; high = mid+1; high = 2+1 =3
0 3 (0+3)/2 = 1 5 2 < 5; high = mid+1; high = 1+1 =2
0 2 (0+2)/2 = 1 5 2 < 5; high = mid+1; high = 1+1 =2
0 2 (0+2)/2 = 1 5 2 < 5; high = mid+1; high = 1+1 =2

It is going into infinite loop. What iam missing

Got it on line 10 high should be mid - 1.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.