python二分法查找算法实现方法【递归与非递归】

yizhihongxing

Python二分法查找算法实现方法【递归与非递归】

二分法查找算法是一种高效的查找算法,它的基本思想将有序数组分成两部分,然后判断目标值在哪一部分,再递归地在该部分中查找目值。本文将介绍Python中二分法查找算法的实现方法,包括递归和非递归两种方式。

二分法查找法实现方法

递归实现

递归实现二分法查找算法的基本思想是将有序数组分成两部分然后判断目标值在哪一部分,再递归地在该部分中查找目标值。具体实现方法如下:

def binary_search_recursive(arr, target, low, high):
    if low > high:
        return -1
    mid = (low + high) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] > target:
        return binary_search_recursive(arr, target, low, mid-1)
    else:
        return binary_search_recursive(arr, target, mid+1, high)

其中,arr为有序数组,target为目标值,low为数组的起始下标,high为数组的结束下标。如果目标值在数组,则返回目标值的下标;否则返回-1。

非递归实现

非递归实现二分法查找算法的基本思想是将有序数组分成两部分,然后判断目标值在哪一部分,再环地在该部分中查找目标值。具体实现如下:

def binary_search_iterative(arr, target):
    low, high = 0, len(arr)-1
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] > target:
            high = mid - 1
        else:
            low = mid + 1
    return -1

其中,arr为有序数组,target为目标值。标值在数组中,则返回目标值的下标;否则返回-1。

示例说明

示例1

假设有一个有序数组arr=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19],需要查找目标值target11的下标可以使用递归实现的二分法查找算法,代码如下:

arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
target = 11
result = binary_search_recursive(arr, target, 0, len(arr)-1)
if result != -1:
    print("目标值在数组中的下标为:", result)
else:
    print("目标值不在数组中")

结果为:

目标值在数组中的下标为: 5

从输出结果可以看出,目标值11在数组中的下标为5。

示例2

假设有一个有序数组arr2, 4, 6, 8, 10, 12, 14, 16, 18, 20],需要查找目标值target5的下标。可以使用非递归实现的二分法查找算法,代码如下:

arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
target = 5
result = binary_search_iterative(arr, target)
if result != -1:
    print("目标值在数组中的下标为:", result)
else:
    print("目标值不在数组中")

输出结果为:

目标值不在数组中

从输出结果可以看,目标值5不在数组中。

总结

本文介绍了Python中二分法查找算法的实现方法,包括递归和非递归两种方式。递归实现的二分法查找算法的基本思想是将有序数组分成两部分然后判断目标值在哪一部分,再递归地在该部分中查找目标值;非递归实现的二分法查找算法的基本思想是将有序数组分成两部分,然后判断目标值在哪一部分,再环地在该部分中查找目标值。在实际应用中,可以根据具体情况选择适合的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python二分法查找算法实现方法【递归与非递归】 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 用python实现学生信息管理系统

    用Python实现学生信息管理系统 概述 本文将讲述如何用Python实现一个简易的学生信息管理系统。 该系统包括以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 数据结构 我们可以用一个列表来存储所有学生的信息,列表中的每个元素都代表一个学生的信息,包括姓名、性别、年龄、学号等。 例如: students = [ {"name&…

    python 2023年5月19日
    00
  • Python 删除List元素的三种方法remove、pop、del

    Python删除List元素的三种方法remove、pop、del 在Python中,List是一种常用的数据结构,它可以存储多个元素,并且支持动态添加和删除元素。本文将详细讲解Python删除List元素的三种方法remove、pop、del,包括它们的使用方法、区别和示例说明。 方法一:remove() remove()方法可以用于删除List中指定的元…

    python 2023年5月13日
    00
  • python3 如何解压缩.gz文件

    当我们遇到一个.gz格式的压缩文件时,需要先解压缩该文件,才能获得其中的内容。下面是python3 如何解压缩.gz文件的完整攻略: Step 1:导入gzip模块 gzip模块可用于解压缩.gz文件,首先需要先导入该模块。代码如下: import gzip Step 2:打开.gz文件 将.gz文件解压缩前,需要先将其打开。使用gzip模块下的open()…

    python 2023年6月3日
    00
  • python实现烟花小程序

    Python实现烟花小程序攻略 烟花小程序是一种基于Python语言开发的,可以在计算机屏幕上模拟烟花爆炸效果的小程序。在这里我们将详细讲解如何使用Python实现烟花小程序。 1. 实现思路 烟花小程序的实现思路主要分为两个步骤: 步骤1:在窗口中随机生成n个烟花初始点。 步骤2:每个烟花在随机时间内发射,烟花发射时根据其所在点和目标点画出一条抛物线路径。…

    python 2023年5月23日
    00
  • 如何在Python中使用sqlite3库连接SQLite数据库?

    在 Python 中,我们可以使用 sqlite3 库来连接 SQLite 数据库。下面是如何在 Python 中使用 sqlite3 库连接 SQLite 数据库的完整使用攻略。 连接 SQLite 数据库 在使用 sqlite3 库连接 SQLite 数据库时,需要指定数据库文件的路径。下面是一个连接 SQLite 数据库的示例: import sqli…

    python 2023年5月12日
    00
  • 用python监控服务器的cpu,磁盘空间,内存,超过邮件报警

    下面是使用Python监控服务器的CPU、磁盘空间、内存,并超过邮件报警的完整攻略: 1. 安装必要的Python库 我们需要安装以下Python库来监控服务器的CPU、磁盘空间和内存: psutil:用于获取系统CPU、内存和磁盘等信息。 smtplib:用于发送邮件。 可以使用pip安装这些库: pip install psutil smtplib 2.…

    python 2023年6月2日
    00
  • 浅谈Python中文件夹和python package包的区别

    下面我将详细讲解“浅谈Python中文件夹和python package包的区别”的完整攻略。 文件夹和Python Package的基本概念 在Python中,文件夹和Python Package这两个概念常常被用到,但是很多人却对它们的区别感到困惑。 文件夹指的是一个操作系统中的文件夹,也就是存放文件的目录。 而Python中的Package则是一种特殊…

    python 2023年6月5日
    00
  • 提取json字段并使用python将它们写入csv

    【问题标题】:Extract json fields and write them into a csv with python提取json字段并使用python将它们写入csv 【发布时间】:2023-04-07 23:05:01 【问题描述】: 我有一个包含多个字段的非常大的 json,我想只提取其中一些,然后将它们写入 csv。 这是我的代码: #!/…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部