#python算法100天 DAY03--Binary Search(二分查找算法)

在有序数列中,二分查找是一种效率较高的搜索算法。本文介绍了二分查找的工作原理和退出条件,通过迭代而非递归的方式实现。通过不断调整中间点,缩小搜索范围,直到找到目标值或搜索区间为空。
摘要由CSDN通过智能技术生成

问题的提出:在给定的一组有序数列中找出要找的数,输出这个数和这个数在数组中的位置

注意:二分查找只能在有序数列中实现

在数列中查找一个数的方法有很多,最简单的就是暴力搜索,从数组的第一个数开始逐个搜索,但是这样会很慢,特别是数非常多的时候,而二分查找则是为了节约时间提出的一种算法

二分查找算法说起来特别简单易懂,难就难在如何确定退出条件和中间点的计算。

二分算法就是先找到这个数列的中间点,比较中间点对应的数m和要找的这个数a的大小,如果a>m则在右边的子序列中继续使用二分查找算法找a。相同如果a<m则在左边的子序列中使用二分查找算法找出a。

上述所说的很多同学能感觉到有递归的味道,二分查找确实可以用递归实现,但是博主这里只用了迭代的方法实现0.0

退出条件的确定和中间点的计算:分别定义left和right两个数来表示数组第一个数的下标和数组最后一个数的下标,middle为中间点的位置,显而易见,一开始middle = (left+right)//2(除2取整),但是当middle所对应的数不是要查找的数的时候,我们需要查找子序列,如果a>m则我们让left = middle+1,这样我们就是用left和right将原来的数列切割成我们所需要的子序列了,当a<m的时候,相似的,我们让right = middle -1即可得到我们想要的子序列。使用这种方法中间点就确定好了。我们还可以发现left必须始终小于等于right,利用这一点我们就可以确定出退出条件了,那就是left>right。

附上代码:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值