栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python二分查找

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python二分查找

#二分查找

def binarySearch(arr, target):
    l = 0
    r = len(arr) - 1
    while(l <= r):
        # 为什么这个=号的影响这么大呢?l < r就不行呢?
        # 因为如果没有这个等号,当r和l指针重合时就进不来了。r和l重合,意味找到了,此时应该进入while把结果返回出去。
        # r和l重合的下一次迭代就该返回-1了;
        mid = (l+r)//2
        if arr[mid] == target : return mid
        if arr[mid] < target:
            l = mid + 1
        elif arr[mid] > target:
            r = mid - 1
    return -1

arr = [1,2,3,4,5,6,7,8,9,90,111]
target = 7.5
print("Index is {:d}".format(binarySearch(arr, target)))



自己蒙着头写了一遍,发现判断条件那块,总是写错。

while r<=l都应该进入循环!!!

为什么呢?因为如果没有这个等号,当r和l指针重合时就进不来了。r和l重合,意味找到了,此时应该进入while把结果返回出去。

当然还有迭代的写法,那么把l,r也都放到形式参数中去吧。

Python 二分查找 | 菜鸟教程

# 递归的解决方案

def binarySearch(arr, target, l ,r):
    if l <= r:
        mid = (l+r)//2
        if arr[mid] == target : return mid
        if arr[mid] < target:
            l = mid + 1
            return binarySearch(arr, target, l ,r) #这里总是忘记写return
        else:
            r = mid - 1
            return binarySearch(arr, target, l ,r)
    else:
        return -1

arr = [1,2,3,4,5,6,7,8,9,90,111]
l = 0
r = len(arr) - 1
target = 8
res = binarySearch(arr, target, l, r)

print("Index is {:d}".format(res))

用递归的方法,解决这个问题时,总是忘记,return 递归函数的结果

天啊!!!

我从来没有考虑过这个问题:

mid = low + (high-low) //2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号