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

python 二分法查找

时间:2023-03-16 11:22:32浏览次数:36  
标签:arr return python 元素 mid 二分法 中间 查找

二分查找(搜索)是一种在有序列表中查找某一特定元素的搜索算法。

二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

def binary_search(arr, l, r, x):
    if r > l:                   # 基本判断,右面的位置大于左面的位置
        mid = int(l + (r - l) / 2)          # 计算出中位数
        if arr[mid] == x:       # 元素正好中间的位置
            return mid
        elif arr[mid] > x:      # 查找的元素小于中间的元素的值
            return binary_search(arr, l, mid+1, x)
        else:                   # 查找的元素大于中间的元素的值
            return binary_search(arr, mid, r, x)
    else:
        return -1               # 不存在
array = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69,99,107]
 
#函数递归
#定义一个函数,给三个形参:低位值,高位值,查找值
def BinarySearch(low,height,findNum):
    #计算出中位数
    middle = (low+height)//2
    #如果中位数小于查找值,则锁定后半段
    if findNum >array[middle]:
        #重置低位数
        low = middle +1
    #如果中位数大于查找值,则锁定前半段
    elif findNum<array[middle]:
        #重置高位值
        height = middle - 1
    else:
        #找到该值并返回
        return '该值下标为:%s,值为:%s'%(middle,array[middle])
    #没有找到则调用自身继续查找
    return BinarySearch(low,height,findNum)
 
print(BinarySearch(array[0],len(array)-1,19))

标签:arr,return,python,元素,mid,二分法,中间,查找
From: https://www.cnblogs.com/wyh0923/p/17221652.html

相关文章

  • python代码换行问题(用‘\’来达成)
    在Python中,可以使用反斜杠符号'\'来表示代码换行,从而实现在代码中进行换行,并保持语句的完整性。例如:、#使用反斜杠符号进行换行result=10+\20+\......
  • python+playwright 学习-33.launch_persistent_context 启动本地 Google Chrome 并加
    前言playwright启动GoogleChrome浏览器的时候默认用的是无痕模式,不加载本地的数据,这对于测试人员运行一个干净的浏览器是没问题的。大家在学selenium的时候,知道selen......
  • python将控制台信息写入文件。
    参考链接:https://blog.csdn.net/weixin_44120785/article/details/129106587 使用Python写入文件是我们coder的日常,本篇带你详细看一下python将内容写入文件的方法以及......
  • python爬虫增加多线程采集数据
    Python爬虫对于现如今大数据满天飞的时代来说真是如虎添翼,也越来越多的领域喜欢用Python来实现数据采集。像Scrapy、Request、BeautifuSoap、urlib等框架都可以实现自动爬......
  • Python模块
    Python基础之模块前置技术点:函数模块概述一个模块其实就是一个.py文件,同时大部分模块命名规范都是小写的,如time模块,os模块,pygame模块等模块可分为三类:内置模块:py......
  • Kali中python问题
    Kali中python问题1、查看python有哪些版本update-alternatives--displaypython2、如果没有,可以去/usr/bin查看kali自带哪些版本查看命令:lspython*3、添加不同的pyt......
  • 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分
    全文下载链接:http://tecdat.cn/?p=23544最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊......
  • Python 中 with 语句的详解
    1.概述在Python中,只要一个对象实现了__enter__和__exit__方法,那么就能使用with语句,该对象也可以称之为上下文管理器。官方文档的相关说明:上下文管理器的语法:......
  • python发邮件
    importsmtplibfromemail.mime.textimportMIMEText#邮件正文fromemail.headerimportHeader#邮件头#登录邮件服务器smtp_obj=smtplib.SMTP_SSL("s......
  • python配置和多版本
    python安装镜像安装包:https://registry.npmmirror.com/binary.html?path=python/选择python-3.*-amd64.exe即可pip下载包使用国内镜像的配置在C:\Users\username\p......