查找算法:二分查找(python写法)

二分查找: 

             条件:需要查找的元素所在的列表是一个有序列表。
             重点:对比mid以后,确定新的左右边界,逐渐缩小边界。
            关键词:li必须是一个有序列表。如何确定左右边界,如何移动左右边界。

一维列表的二分查找:

def binary_search(li,num): #定义二分查找函数

    left=0 #初始化左边界

    right=len(li)-1 #初始化右边界

    while left<=right:  #循环条件:左右边界没有交叉,则进行查找的循环。

        mid=(left+right)//2  #初始化mid指针,将li从中间分开成两个部分。

        if num>li[mid]:  #如果需要查找的值是比中间值大

            left=mid+1  #移动left到mid的右边去,舍去了left与mid之间的那个区域。

        elif num<li[mid]:  #如果需要查找的值比中间值要小

            right=mid-1 #移动right到mid的左边,舍去了right与mid之间的那个区域。

        else:#num==li[mid] 既不大于,也不小于,那么一定是等于

            return mid

    return -1  #不存在返回-1

  二维列表的二分查找:

def binary_search_2(li,num):

    height=len(li)#总行数

    weight=len(li[0])#最大宽度

    left=0#初始化左边界

    right=height*weight-1 #初始化右边界

    while left<=right:#循环条件:左右边界没有交叉,则进行查找的循环。

        mid=(left+right)//2 #初始化mid指针。

        mid_h=mid//weight#把mid的下标转换为二维列表的行数

        mid_w=mid%height#把mid的下标转换为二维列表的列数

        if num>li[mid_h][mid_w]:#如果需要查找的值是比中间值大

            left=mid+1 #移动left到mid的右边去,舍去了left与mid之间的那个区域。

        elif num<li[mid_h][mid_w]: #如果需要查找的值比中间值要小

            right=mid-1#移动right到mid的左边,舍去了right与mid之间的那个区域。

        else:既不大于,也不小于,那么一定是等于

            return [mid_h,mid_w]

    return [-1,-1] #不存在返回-1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值