二分查找法(折半查找法)详解

检测某个值是否存在,用二分查找法的前提是序列是有序的(升序或降序)在序列中不断折半缩小区间,进行查找。

//定义一个升序序列,查找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;//跳出循环
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42581477/article/details/81118748