#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 1000
int a[max];
int bisect(int a[],int n, int v)//定义二分查找函数
{
int i,j,m;
i=0;//i为开始
j=n-1;//j为结束
while(i<=j)
{
m=(i+j)/2;//m为i和j中间
if(v==a[m])//如果刚好查找到,返回
return m;
if(v<a[m])//如果v小于中间的值,改变j,继续在小的那一半查找
j=m-1;
else i=m+1;//否则在大的那一半查找
}
return -1;
}
int main()
{
int n,v;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));//初始化数组
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&v);//要查找的元素
int x=bisect(a,n,v);
printf("%d\n",x);
}
}
每次查找都尝试将此次的中间值和要查找的值做比较,如果小于中间值,则继续在较小的那一边查找,如果大于中间值,则改变i,在较大的一边查找。