检测某个值是否存在,用二分查找法的前提是序列是有序的(升序或降序)在序列中不断折半缩小区间,进行查找。
//定义一个升序序列,查找2是否在序列中,定义最左值(L),中间值(M),最右值(R),不断循环直到2等于中间值,循环结束,查找成功打印输出。
int buf[]={1,2,3,4,5,6,7,8,9,10,11};
第一次 L M R(区间1-11)
第二次 L M R (区间1-5)
第三次 L.M.R(区间1-3,中间值正好是2,2存在序列中)
#include<stdio.h>
void main()
{
int buf[]={1,2,3,4,5,6,7,8,9,10,11};
//折半查找(二分查找法)
int mid,left=0,right=10;
int key=2;//在序列中查找2是否存在
//从区间中获取中间元素的下标
while(left<=right)
{
mid=(left+right)/2;
if(key<buf[mid])//查找值在中间值的左侧
{
right=mid-1;//往左缩小区间
}
else if(key>buf[mid])//查找值在中间值的右侧
{
left=mid+1;//往右缩小区间
}
else if(key==buf[mid])//查找值等于中间值
{
printf("查找成功,在第%d个元素\n",mid+1);
break;//跳出循环
}
}
}