C语言
使用二分查找法时发现部分数字无法被找到
#include
int search(int key, int a[], int len);
int main() {
int a[] = { 1,2,3,4,6,8,9,13,46,78,88,99,100 };
int key;
printf("请输入你要搜索的数字:");
scanf_s("%d", &key);
int r = search(key, a, sizeof(a) / sizeof(a[0]));
printf("该数字排在第%d位。", r);
return 0;
}
int search(int key, int a[], int len) {
int left = 0;
int right = len - 1;
int ret = -1;
while(left < right) {
int mid = (left + right) / 2;
if (a[mid] < key) {
left = mid + 1;
}
else if(a[mid]>key) {
right = mid -1;
}
else {
ret = mid;
break;
}
}
return ret;
}
输入46和100时输出的结果都为-1
while(left < right) {
改为
while(left <= right) {
就可以了
这个你可以带进去46模拟一下,最后left=7,right=8,那么加起来除以2是 7,永远不会找到,所以最后你需要判断一下left或者right指向的值等不等于46再修改ret 并返回
不知道你这个问题是否已经解决, 如果还没有解决的话: