首页 > 编程语言 >如何使用Python实现二分查找算法

如何使用Python实现二分查找算法

时间:2023-05-14 14:32:46浏览次数:41  
标签:二分 arr Python 元素 mid 算法 查找

二分查找算法是一种常用的搜索算法,其时间复杂度为O(logn),可以快速地从有序数组中找出目标元素。在本篇文章中,我们将学习如何使用Python实现二分查找算法。


二分查找算法的原理很简单:首先确定数组的中间位置,然后将目标元素与中间元素进行比较。如果目标元素小于中间元素,则在数组的左半部分继续查找;如果目标元素大于中间元素,则在数组的右半部分继续查找。这个过程不断重复,直到找到目标元素或者确定不存在。


下面是Python实现二分查找算法的代码:


```python

def binary_search(arr, target):

    left, right = 0, len(arr) - 1

    while left <= right:

        mid = (left + right) // 2

        if arr[mid] == target:

            return mid

        elif arr[mid] < target:

            left = mid + 1

        else:

            right = mid - 1

    return -1

```


代码中,我们定义了一个函数`binary_search`,它有两个参数:`arr`表示要查找的数组,`target`表示要查找的目标元素。函数中的变量`left`和`right`分别表示查找范围的左右边界,初始化为数组的首尾位置。在`while`循环中,我们不断缩小查找范围,直到找到目标元素或者确定不存在。`mid`表示当前查找范围的中间位置,比较目标元素和中间元素的大小关系来确定下一次查找的方向。如果目标元素小于中间元素,则在左半部分继续查找,更新右边界`right`的位置为`mid-1`;如果目标元素大于中间元素,则在右半部分继续查找,更新左边界`left`的位置为`mid+1`。如果最终没有找到目标元素,则返回-1表示不存在。


接下来,我们测试一下上述代码的运行情况:


```python

arr = [1,3,5,7,9]

target = 5

print(binary_search(arr, target))

```


输出结果为:2。这意味着在数组[1,3,5,7,9]中,目标元素5位于索引位置2。


二分查找算法的时间复杂度是O(logn),比顺序查找的O(n)要快得多。但是,二分查找算法要求数据必须是有序的,因此要在使用该算法之前对数据进行排序操作。


在实际应用中,我们还可以对二分查找算法进行改进:当数组中的元素较少时,可以直接用顺序查找代替二分查找,因为二分查找的优势体现在数据量较大时,而当数据量较小时,其优势不明显。此外,我们还可以使用递归方式实现二分查找算法,具体实现方法可以自行思考。


总之,二分查找算法是一种非常有用的算法,在实际应用中被广泛使用。掌握其实现方法和注意事项,对提高编程能力和解决实际问题具有重要意义。

标签:二分,arr,Python,元素,mid,算法,查找
From: https://blog.51cto.com/u_16095932/6274900

相关文章

  • Python学习之七_input和print
    Python学习之七_input和print摘要python3之后函数必须带()了因为我开始学习的比较晚,所以准备Python3开始学起前面主要是模仿别人的代码进行学习后续慢慢学习使用python调用ebpf等内容.这里简单先总结一下input和print的函数.作为一个学习总结print和inputprint......
  • python常用的模块值时间模块-time
    一、在python中,通常有以下几种方式来表达时间1、时间戳,比如1684036783.6709572、格式化字符串,比如2023-05-05/14/2311:58:363、元组,比如time.struct_time(tm_year=2023,tm_mon=5,tm_mday=14,tm_hour=11,tm_min=59,tm_sec=43,tm_wday=6,tm_yday=134,tm_isdst=0) 二......
  • 常见问题解决 --- python必备技能 换源
    源是什么源是编程开发或则是操作系统要使用的第三方依赖软件应用市场,源又从何而来,其实源来自其他的源的克隆,或者是源提供者自己收集,编译,又或者作者的上传为什么要换源这些源往往都在国外,国内以为你懂的原因无法直接访问或者特别慢怎么换Windows下python永久换源方式有两种:修......
  • 供应链库存管理策略(s,S)——Python仿真
    供应链物流是货品的供应商采购、仓库存储、仓间库存调拨、履约送货等一系列货品流转到用户的过程,其中各个环节会涉及到成本、时效等优化。供应链智能补货项目是货品从供应商采购货品的环节,主要考虑的是货品的缺货成本和持货成本平衡的问题,两者常用的考量分别是周转和缺货率。当库......
  • pta python实验3-6
    python实验4循环结构 1importmath23defestimate_pi(n):4total=05ret=06foriinrange(n+1):7ifi%2==0:8sign=19else:10sign=-111term=sign/((2*i+1)*mat......
  • Python学习之六_同时访问Oracle和Mysql的方法
    Python学习之六_同时访问Oracle和Mysql的方法背景jaydebeapi可以访问大部分数据库.但是他有一个问题是仅能够访问一种类型的数据库.如果同事连接两种数据库,那么就会出现问题会有如下的提示:TypeError:Classcom.mysql.cj.jdbc.Driverisnotfound网上有方法是修改j......
  • Python连接数据库
    使用pymysql库:使用pip进行安装:pipinstallpymysql以下是使用pymysql库连接MySQL数据库的示例代码:importpymysql#连接到MySQL数据库conn=pymysql.connect(host='localhost',user='username',#用户名和密码改为自己的password='password',db='data......
  • Python for loop with index All In One
    PythonforloopwithindexAllInOne带索引的Pythonfor循环error❌#!/usr/bin/python3Blue=17GREEN=27RED=22LEDs=list([RED,GREEN,Blue])forled,iinLEDs:print('led=',LEDs[i])#22,27,17"""Traceback(mo......
  • 哈希表——创建,查找结点——C语言描述
    哈希表——创建,查找结点——C语言描述目录哈希表——创建,查找结点——C语言描述0测试用例框架1定义2数据结构2初始化哈希表与查找(1)代码(2)测试用例(3)打印结果0测试用例框架https://blog.csdn.net/m0_59469991/article/details/127137119?csdn_share_tail=%7B%22type%22%3A%22......
  • 括号生成--Python解法
    数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。例如n=1,输出:["()"]classSolution:defgenerateParenthesis(self,n:int)->List[str]:res=[]cur_str=''defdfs(cur_str,left,right):......