二分查找字符
/* binsearch函数:在v[0<=v[1]<=v[2]<=...<=v[n-1]中查找x] */ int binsearch(int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; while(low <= high){ mid = (low + high) / 2; if(x < v[mid]) high = mid - 1; else if(x > v[mid]) low = mid + 1; else /* 找到了匹配的值 */ return mid; } return -1; /* 没有匹配的值 */ }
另一个版本
/* binsearch函数:在v[0<=v[1]<=v[2]<=...<=v[n-1]中查找x] */ 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]){ if(x < v[mid]) high = mid - 1; else low = mid + 1; mid = (low + high) / 2; } if(x == v[mid]) return mid; /* 找到了匹配的值 */ else return -1; /* 没有匹配的值 */ }
这两种方案的执行时间几乎相同,但是第二种失掉了代码的可读性,原有代码更容易阅读和理解。