折半(二分)查找精要

本文详细介绍了折半查找算法,包括其前提条件、应用场景、查找步骤和通用形式。适用于有序数组或字符数组,可用于查找特定数值或确定数值所在区间。通过不断调整起点和终点,计算中间点来优化搜索效率。示例代码展示了如何在C++中实现折半查找。

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

一、使用折半查找的前提条件

对有序数组进行查找。

二、折半查找的一般应用场景

查找数组中某个切实存在的数字。

三、其他应用场景

稍微变化一些的应用场景是查找有序的字符数组中的某个字符,或者是查找某个数值所在的区间。
查找某个数值所在的区间,就是说,假如有数组 a = [1,5,9,13,32],我要查找数字11所在的区间是哪一个,使用折半查找也可以实现。

四、折半查找的重要参数

起点、中间点和终点。

五、查找步骤

(1)建立要查找的有序数组;
(2)定义起点、中间点、终点变量和要查找的常量;
(3)进入查找循环,编写查找逻辑。如果查找到了会把对应的数组下标,返回到主函数,如果没有查找到,则准备进入下次循环;
(4)求出下一次循环中要判断的中间点,进入下次循环判断。
折半查找示意图

六、折半查找的通用形式
//建数组,赋初值
int a = [1,3,10,15,31,39,42,45,47];
int left = 0;     //左边点,即起点的数组元素下标一般都是0,除非不从0开始查找
int right = sizeof(a)/sizeof(a[0]) - 1;     //右边点,即终点的数组元素下标一般都是数组长度-1,sizeof可以算出a数组所有元素所占的总字节数,用总字节数除以单个元素所占字节数,就可以得出数组元素个数,即数组长度
int middle = (right - left) / 2 + left;     //中间点,如果查找的数组序列是从下标0开始,自然不用考虑加不加left的问题,但如果此时查找的数组序列不是从下标0开始,则必须要再加上left,才是实际要查找的中间点。
const int find_num = 31;     //要查找的数字是31,定义常量

//写框架
while(1)
{
    if(find_num = a[middle])
    {
         //找到了
          return middle;
    }
    else if(find_num > a[middle])
    {
         //没找到,在中间点右边,把此时的中间点赋值给起点
         left = middle;
    }
    else if(find_num < a[middle])
    {
         //没找到,在中间点左边,把此时的中间点赋值给终点
         right = middle;
    }
    
    middle = (right - left) / 2 + left;     //求出下次循环,要比较的中间点
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moxin墨心_cv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值