int *bsearch(int data[], int n, int x)
{
int *p_rslt = NULL;
int *p_start = data;
int *p_mid = NULL;
int *p_end = data + n;
if ((NULL == data) || (n < 1)) {
goto EXIT;
}
while (p_start < p_end) {
p_mid = p_start + (p_end - p_start) / 2;
if (*p_mid > x) {
p_end = p_mid;
} else if (*p_mid < x) {
p_start = p_mid + 1;
} else {
p_rslt = p_mid;
break;
}
}
EXIT:
return p_rslt;
}
PS1: 第一个二分查找程序在1946年已经公布,但是到了1962年才出现第一个没有BUG的二分查找程序
PS2: 循环不变式
PS3: 测试了很多边界情况,现在依然没把握说一定没错,如有错请指正,3Q!