【发布时间】:2017-01-10 05:37:50
【问题描述】:
这是代码:
char binarySearch(unsigned int target, int* primes, unsigned int size){
int* ptrToArray = primes;
unsigned int first = 0;
unsigned int last = size;
while (first <= last){
unsigned int middle = first + (last - first) / 2;
printf("first: %d, last: %d, middle: %d\n", first, last , middle);
if (ptrToArray[middle] == target){
return 1;
}
if (ptrToArray[middle] < target){
first = middle + 1;
}else{
last = middle - 1;
}
}
return 0;
}
这是输出:
我一直盯着这种平静的代码看不止一个,但仍然无法弄清楚缺陷在哪里。
【问题讨论】:
-
@Thomas 是的,没错。
-
如果
size不是有效值,您必须处理这种情况。 -
另外,简单的数学简化了
first + (last - first) / 2,所以更清楚的是它是中间的。 -
也就是说如果
size <= 0,你应该返回一些错误让用户知道数组不正确。 -
尝试 unsigned int last = size-1;而不是 unsigned int last = size;