非对称二分搜索算法实现,具体好处见《C陷阱与缺陷》 P132 练习3-3
代码如下:
#include <stdio.h>
int * bsearch(int *a, int n, int key)
{
int *left = a, *right = a + n;
while(left < right)
{
int * mid = left + ((right - left) >> 1);
if(key < *mid)
right = mid;
else if(key > *mid)
left = mid + 1;
else
return mid;
}
return NULL;
}
int main()
{
int n, key, i;
int *a, *tmp, *end, *result;
scanf("%d %d", &n, &key);
a = (int *)malloc(sizeof(int) * (n + 1));
tmp = a;
end = a + n;
for( ; tmp < end; tmp++)
scanf("%d", tmp);
result = bsearch(a, n, key);
if(result)
printf("成功找到, 该元素位置为 %d 该元素的值为 %d\n", result, *result);
else
printf("未找到该元素\n");
free(a);
return 0;
}