C语言:二分法查找

什么是二分法查找?

二分法查找是通过循环平分的方式,来进行查找想要的数或数据。

那么,要怎么编写这样的代码呢?

首先,要把一系列的数组存入变量当中去,将其当成已知数据。比如将1~10十个数字存到变量中去,就可以写成:

然后就要知道,查找数据是通过下标实现查找的。

这个时候就可以定义变量,通过控制变量进而控制下标的变换,就比如可以这样定义:

因为存入的是十个数字,第一个数字的下标是1,第十个数字的下标正好是9,所以定义left = 0;right = 9 。

然后就是二分法来缩小范围,先收尾相加除以2定义为中间变量,例如:

再通过看中间变量和输入数字的位置关系,确定中间变量是要赋值给 left 还是赋值给 right 。这个时候就可以使用 if 语句进行判定了。

同时,要记得,如果赋值给 left 的话,应该加1再赋值到left,因为刚才已经判定了中间变量与输入数字的位置关系,可以确定输入数字是不包括中间变量的,因此中间变量加1在不违反所要结果的同时,进一步缩小了范围,提高了代码运行速率。

同理可得,如果赋值给right的话,应该减1再赋值到right。

例如:

 

最后,就是将代码合并起来,所以,二分法找下标的完整代码:

对此,还可以对这个代码进一步推广,比如,可以用循环将数字个数存入数组中,这样存入的数字就不限于10个数字,推广到可以存入尽可能多的数字;找下标也可以推广到通过这个下标进而在这个数组中找到其中的数字。

但是,这样推广后就会存在一个问题:right 是要知道数组中最后一个数字的下标,才能够进行的,如果推广到数组中有很多个数字,以至于在短时间内很难去确定其下标,那 right 又应该如何赋值呢?

如上图所示,可以将数组的总长度除以每个数字的长度,就可以知道总共有多少个数字。然后就可以赋值给 right 。

 

 注意在赋值给 right 的时候,需要先减1再赋值,因为数字总比下标大1。

这样,就可以完成二分法查找的整个过程了。

  • 13
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蔡欣致

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

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

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

打赏作者

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

抵扣说明:

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

余额充值