基础搜索算法篇---二分搜索

                用于在有序数组中查找的算法,优势是能降低时间复杂度。 

时间复杂度的讨论:

                线性搜索在最坏的情况要比较n次,而二分搜索大概需要log2N次。由于二分搜索,每进行一次比较,搜索范围就会减半,所以降低了复杂度,二分搜索的复杂度为logN。

(大部分教材log2N都直接表示为 logN)

        元素n n=100 线性搜索 100次 二分搜索 7次

                  n=10000 线性搜索 10000次 二分搜索 14次    2^14 大致等于 10000

                二分搜索只能使用在有序的数组(因为会根据当前数据元素的中间值来逐渐确定目标元素的位置)。

步骤为:1.先与中间值比较,如果相等就退出。

2.如果不符合就判读大于还是小于中间值然后缩短搜索范围。

 (数组为升序,如果target大于middle这个中间值,我们就把下次搜索范围缩短到

[middle+1,right]

 此时的left = middle+1 (关于left = middle+1 和 middle =(left + right +1)/2 涉及到该二分查找是

否会死循环和是向下取整还是向上取整)

middle = (right + left)/2 (更新当前中间元素的值)

3.重复执行以上步骤,直到 left>right  或者 找到了目标值。

关于死循环:

例如 left = 3 ,right =4 如果 middle = (left + right )/2

left=middle 就会进入死循环,原因是(3+4)/2 =3 

left > right 的情况是没有找到目标值

是已经把数组搜索范围划分到最小的情况(即left,middle,right它们的下标是相邻的三个),再执行

right = middle     

middle = (left + right)/2

middle = left

 仍然没有找到的话就会让 left > right,然后结束查找。

代码如下:

运行:

初始化以及调用

 结果:

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值