这样的代码,见第44页。
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while(low <= high){
mid = (high+low)/2;
if(x < v[mid]){
high = mid + 1;
}else if(x > v[mid]){
low = mid + 1;
}else{
return mid;
}
printf("mid is %d\n",mid);
}
return -1;
}
int main(void)
{
int v[] = {2,3,4,7,8,23,54,65,76};
int ret = binsearch(7, v, sizeof(v)/sizeof(int));
printf("%d,ret is %d\n", sizeof(v),ret);
return 0;
}
编译并运行它,结果是死循环!所以行“low = mid + 1;”应该采取“低=中;”,是吗?thx。
答案 0 :(得分:6)
您发布的代码中的问题不是low
的值,而是在high
的值设置测试中......如果x
小于{ {1}},然后v[mid]
的新索引值应小于,不大于high
。所以你想改变以下内容:
mid
为:
if(x < v[mid]){
high = mid + 1;
您可以在此处查看一个有效的示例:http://ideone.com/E6Ma8