#include<stdio.h>
int seek(int n,int a[],int x){
int lt=0,rt=n-1,mid=(lt+rt)/2;
while(lt<=rt){
if(a[mid]==x) return mid+1;
else
if(a[mid]>x) rt=mid-1;
else lt=mid+1;
}
return 0;
}
void main(){
int a[30],i,n,x,mid=0;
scanf("%d",&n);//输入n个数
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&x);//输入要查找的x值
//seek(n,a,x);
if(seek(n,a,x)>0)
printf("%d\n",seek(n,a,x));
else printf("no found\n");
}
在while循环里面需要每循环一次,左右范围已经变了,mid中值也需要更改。你试试在while循环体的第一行加上
mid = (lt + rt) / 2;
谢谢
if(seek(n,a,x)>0)
printf("%d\n",seek(n,a,x));
为什么要计算两次seek?如果要判断,用个变量接收返回值,然后打印输出,你这么写是计算两次二分。而且你写的二分查找也有问题,你这是一个一个去计算了,而不是二分查找。