首页 > 编程语言 >python 二分查找算法

python 二分查找算法

时间:2023-02-20 10:13:38浏览次数:36  
标签:二分 end python mid num aim start 查找 66

python 二分查找算法 

楔子

如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你说,so easy!

l.index(66)...

我们之所以用index方法可以找到,是因为python帮我们实现了查找方法。如果,index方法不给你用了。。。你还能找到这个66么?

二分查找算法

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你观察这个列表,这是不是一个从小到大排序的有序列表呀?

如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

这就是二分查找算法

那么落实到代码上我们应该怎么实现呢? 

简单版二分法


l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def func(l,aim):
    mid = (len(l)-1)//2
    if l:
        if aim > l[mid]:
            func(l[mid+1:],aim)
        elif aim < l[mid]:
            func(l[:mid],aim)
        elif aim == l[mid]:
            print("bingo",mid)
    else:
        print('找不到')
func(l,66)
func(l,6)

二分法基础版
二分法基础版

 

 升级版二分法

def search(num,l,start=None,end=None):
    start = start if start else 0
    end = end if end is not None else len(l) - 1
    mid = (end - start)//2 + start
    if start > end:
        return None
    elif l[mid] > num :
        return search(num,l,start,mid-1)
    elif l[mid] < num:
        return search(num,l,mid+1,end)
    elif l[mid] == num:
        return mid
二分算法终极版

 

 

标签:二分,end,python,mid,num,aim,start,查找,66
From: https://www.cnblogs.com/xiao-xue-di/p/17136385.html

相关文章

  • Python爬虫Scrapy框架是什么?
    之前我们有谈到过有关爬虫的两种爬虫方式,一种是静态的利用Requests+bs4,而另一种就是利用Scrapy框架来进行的专业级的数据抓取。一、什么是Scrapy框架?那么什么是Scrapy框......
  • Pycharm cannot set up a python SDK
    一、问题背景进入Pycharm后,打开之前的项目,打开Pycharm→file→settings→projectinterpreter,按照下图1选择配置之后,点击【OK】会出现报错,如图2我的环境上有很多之前的包......
  • Python——while循环
    1.while循环结构格式:while条件:执行语句1……执行语句2……例:#无限循环死循环whileTrue:print('条件是真的!')例:i=0#创建一个计数的变量whi......
  • python基于telnet验证的交换机配置导出打包脚本
    前置条件python3.10需要在配置文件输入的主机上起一个tftp服务交换这里是锐捷交换机这里的认证协议是telnet需要准备一个交换机IP地址的文件供脚本读取代码部分im......
  • Python脚本:把本地文件实时更新到服务器上
    #如果没有安装paramiko,用pipinstallparamiko安装importparamiko,os,timedefupdate(addr,usr,pasw,fn,target_path):trans=paramiko.Transport((addr,......
  • 利用Python进行数据分析——Numpy
    基础索引1.多维度数组1.1二维数组此部分好理解,画一个平面的XY轴,X为横轴,Y为竖轴即可理解。1.2三维数组难点在于理解的是如何把抽象的数组转化为三维空间的数据结构。......
  • 二分
    目录【整数二分】起止位置【小数二分】求算术平方根【二分答案】切割绳子二分本质给定一个具有单调性的区间\([l,r]\),中间切一刀\(mid=(l+r)/2;\)可以将区间分为两个......
  • Python实现排序算法
    冒泡排序defbubbleSort(arr):foriinrange(len(arr)-1):forjinrange(len(arr)-1):ifarr[j]>arr[j+1]:arr[j],arr[j+1......
  • Python 异步: 同时运行多个协程(10)
    asyncio的一个好处是我们可以同时运行许多协程。这些协同程序可以在一个组中创建并存储,然后同时一起执行。这可以使用asyncio.gather()函数来实现。让我们仔细看看。1......
  • Python selenium
    目录selenium功能Python实现seleniumSelenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,......