C程序设计语言 (第二版) 练习3-1
练习 3-1 在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。
注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010
 s;
代码块:
int binsearch(int x, int v[], int n){
int low, high, mid;
low = 0;
high = n - 1;
mid = (low + high) / 2;
while((low <= high) && (x != v[mid])){
(x < v[mid]) ? high = mid - 1 : low = mid + 1;
mid = (low + high) / 2;
}
return x == v[mid] ? mid : -1;
}
示例:
#include <stdio.h>
#include <stdlib.h>
int binsearch(int x, int v[], int n){
int low, high, mid;
low = 0;
high = n - 1;
mid = (low + high) / 2;
while((low <= high) && (x != v[mid])){
(x < v[mid]) ? high = mid - 1 : low = mid + 1;
mid = (low + high) / 2;
}
return x == v[mid] ? mid : -1;
}
int main(){
int x = 3;
int v[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10;
int a;
a = binsearch(x, v, n);
printf("%d\n", a);
system("pause");
return 0;
}