这个前身的K& R ch3错了?

时间:2012-09-28 16:51:54

标签: c

这样的代码,见第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。

1 个答案:

答案 0 :(得分:6)

您发布的代码中的问题不是low的值,而是在high的值设置测试中......如果x小于{ {1}},然后v[mid]的新索引值应小于,不大于high。所以你想改变以下内容:

mid

为:

if(x < v[mid]){
    high = mid + 1;

您可以在此处查看一个有效的示例:http://ideone.com/E6Ma8