/*
* Exercise 3-1 Write the binary search algorithm with only
* one test inside the loop.
*
* Written by fduan on Dec. 15, 2011.
*/
#include <stdio.h>
/* binary search: v[0] <= v[1] <= ... <= v[n-1] */
int bin_search( int x, int v[], int n )
{
int low, high, mid, pos;
pos = -1;
low = 0;
high = n - 1;
while( low <= high )
{
mid = ( low + high ) / 2;
if( v[mid] == x )
{
pos = mid;
break;
}
else if( v[mid] < x )
low = mid + 1;
else
high = mid - 1;
}
return pos;
}
int bin_search_new( int x, int v[], int n )
{
int low, high, mid;
mid = ( low + high ) / 2;
while( low <= high && v[mid] != x )
{
if( v[mid] < x )
low = mid + 1;
else
high = mid - 1;
mid = ( low + high ) / 2;
}
return ( v[mid] == x ) ? mid : -1;
}
int main()
{
int v[] = { 1, 3, 5, 7, 9 };
int x = 3;
printf( "%d, %d\n", bin_search( x, v, 5 ), bin_search_new( x, v, 5 ) );
return 0;
}