【发布时间】:2022-01-05 12:20:21
【问题描述】:
#include <stdio.h>
int bsearch(int ar[],int n,int key)
{
int s=0;
int e=n-1;
while(s<=e){
int mid=(e+s)/2;
if(mid==key){
return mid;
}
else if(key<mid){
e=mid-1;
}
else if(key>mid){
s=mid+1;
}
}
return -1;
}
我为二分查找做了函数
int main()
{
int n,key;
int ar[n];
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("ar[%d]= ",i);
scanf("%d",&ar[i]);
}
printf("Enter key>> \n");
scanf("%d",&key);
printf("%d is the index",bsearch(ar,n,key));
return 0;
}
然后我输入了一个排序后的数组,但有重复。如下图所示。
输出是 3 是索引。 但它应该是 6 是索引。
【问题讨论】:
-
FIY:
bsearch()是标准定义的函数。无论您是#include <stdlib.h>,使用该标识符编写自己的函数都是一个坏主意。 -
将
key == mid更改为key == ar[mid]因为 mid 是索引并且您正在寻找ar[mid]值。在计算mid时,您应该查找溢出错误。你应该使用e + (e-s)/2或(s+e) >> 1而不是(e+s)/2。这将防止溢出错误。
标签: arrays c binary-search