二分查找法

本文介绍了二分查找法的概念和编程思路,这是一种应用于有序数组的高效查找算法。二分查找通过不断缩小搜索范围,将目标值与数组中间元素比较,从而快速定位目标。文中还给出了C++实现的代码示例,演示了如何在有序数组中查找特定数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

所谓的二分查找法,其实是一种有序的查找方法,也称折半查找(Binary Search),如果是无序的则要先进行排序操作。基本思想是:目标值通过与中间元素比较,可分为三种情况:
第一种情况:目标值与中间元素相等,查找结束;
第二种情况:目标值比中间元素大,则把后半部分的中间元素与目标值比较;
第二种情况:目标值比中间元素小,则把前半部分的中间元素与目标值比较;
这三步一直循环,直到查找结束。

二、编程思路

变量left指向有序数列的最左边的下标位置,变量right指向有序数列的最右边的下标位置,变量mid指向中间位置(left+right)/2.接着查找数据20跟中间值buf[mid]进行比较。
如果查找的数据比中间值小,那么查找的数据一定是在中间值的左边,所以更新最右边的下标值right = mid-1
如果查找的数据比中间值大,那么查找的数据一定是在中间值的右边,所以更新最左边的下标值left = mid+1
在这里插入图片描述

三、代码

#include <stdio.h>

/*
思路:变量left指向有序数列的最左边的下标位置,变量right指向有序数列的最右边的下标位置,变量mid指向中间位置(left+right)/2.接着查找数据20跟中间值buf[mid]进行比较。
如果查找的数据比中间值小,那么查找的数据一定是在中间值的左边,所以更新最右边的下标值right = mid-1
如果查找的数据比中间值大,那么查找的数据一定是在中间值的右边,所以更新最左边的下标值left = mid+1
*/
int binarySearch(int *buf,int findData,int length)
{
    int left=0;
    int right = length-1;


    while(left<=right)
    {
        int mid = (left+right)/2;

        if(findData<buf[mid])
        {
            right = mid-1;
        }
        else if(findData>buf[mid])
        {
            left = mid+1;
        }
        else
            return buf[mid];
    }

    return -1;
}


int main()
{
    int buf[10] = {1,2,3,4,5,6,7,8,9,10};

    int length = sizeof(buf)/sizeof(buf[0]);

    int ret = binarySearch(buf,1,length);

    printf("ret:%d\n",ret);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值