Here are two implementations of a “forgetful” binary search, since they do not check for an exact match until they end.
1)
int bsearch1(int A[], int n, int target)
{
int low = 0, high = n - 1, mid = 0;
while (low < high)
{
mid = (low + high) >> 1;
if (target > A[mid])
low = mid + 1;
else
high = mid;
}
if (low == high)
{
if (A[low] == target)
return low;
}
return -1;
}
2)
int bsearch2(int A[], int n, int target)
{
int low = 0, high = n - 1, mid = 0;
while (low < high)
{
mid = (low + high) >> 1;
if (target < A[mid])
high = mid - 1;
else
low = mid;
}
if (low == high)
{
if (A[low] == target)
return low;
}
return -1;
}
NOTES: nis the length of array A, targetis the element to be found.
bsearch1 , bsearch2 , A = [1,3,5,6], target = 5. - while, bsearch2 bsearch1. . bsearch2 ""? , bsearch2 (, )? .
EDIT:
A = [1,3,5,6], target = 5:
1.low = 0, high = 3, mid = 1, A [mid] = 3
2.low = 1, high = 3, mid = 2, A [mid] = 5
3.low = 2, high = 3, mid = 2, A [mid] = 5
...
n.low = 2, high = 3, mid = 2, A [mid] = 5
, bsearch2 low == high , while. , low high low == high bsearch1.