二分算法,一般是在已排序好的数组中提高搜索速度。 每次从middle处开始搜索。
给出两个方法解决:
递归法:
int bin_search(int arr[], int val, int l, int r)
{
int m = (l+r)/2;
if( l >= r )
return (arr[m] == val) ? m : -1;
switch( (arr[m] == val) ? 0:((arr[m] < val) ? -1:-2) )
{
case 0:
return m;
case -1:
return bin_search(arr, val, m+1, r);
case -2:
return bin_search(arr, val, l, m-1);
}
return -1;
}
非递归查询:
int bin_search(int arr[], int val, int len)
{
int l = 0;
int r = len;
while(l <= r)
{
int m = (l+r)/2;
switch( arr[m] == val ? 0 : (arr[m] < val ? -1 : -2) )
{
case 0:
return m;
case -1:
l = m+1;
break;
case -2:
r = m-1;
break;
}
}
return -1;
}