这是代码:
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;
}
这是输出:
我一直盯着代码的和平超过一个应该,但仍然无法弄清楚缺陷在哪里。
最佳答案
如果 middle
是 0
,在调试输出接近尾声时,语句
last = middle - 1
导致整数溢出;必须对条件进行一些修改。
关于c - 二进制搜索访问超出范围的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39286718/