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

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爬虫 urllib2的使用方法详解

    本攻略将提供一个Python使用urllib2爬取网页的方法详解,包括urllib2的概念、urllib2的基本使用方法、爬取网页的方法。攻略将包含两个示例,分别演示如何使用Python爬取网页。 urllib2的概念 urllib2是Python标准库中的一个模块,用于发送HTTP请求和处理HTTP响应。urllib2模块提供了一系列函数和类,用于构建HT…

    python 2023年5月15日
    00
  • Python实现数据可视化看如何监控你的爬虫状态【推荐】

    Python实现数据可视化看如何监控你的爬虫状态【推荐】攻略 什么是数据可视化? 数据可视化是在统计分析的基础上使用图形化的表达方式,展示数据之间的联系、趋势等信息,使得人们对于数据有更直观、更深入、更全面的理解。 为何需要数据可视化? 数据可视化可以让数据更有说服力地传达信息,更方便人们大量数据之间的比较和分析,弥补了数据本身只是数字、文本的不足,相应地,…

    python 2023年5月14日
    00
  • Python贪心算法实例小结

    Python贪心算法实例小结 贪心算法是一种常用的算法,它在每一步选择中都采取在当前状态下最好最优的选择,从而望导致结果是全局最好或最优的算法。在Python中,可以使用贪心算解决多问题,包括背包问题、活动选择问题等。本文将详细讲解Python贪心算法实例,包括算法原理、Python实现过程和示例。 算法原理 贪心算法的基本思想是:每一步都选择当前状态下最好…

    python 2023年5月13日
    00
  • 对python打乱数据集中X,y标签对的方法详解

    对python打乱数据集中X,y标签对的方法详解 对于机器学习中的训练集数据,为了避免模型过拟合,一般需要将数据打乱后再进行训练。那么在python中,我们可以采用以下两种方法来对数据集中X,y标签对进行打乱。 方法一:使用sklearn库中的shuffle函数 from sklearn.utils import shuffle # 假设X和y分别是训练集的…

    python 2023年6月3日
    00
  • python 中文编码乱码问题的解决

    解决Python中文编码乱码问题,需要从多个方面入手,下面为您提供详细的攻略。 步骤一:编码的检测与转换 Python中文编码问题的根源在于字符编码的不统一,因此我们需要对字符编码进行检测和转换。常见的编码格式有GB2312、GBK、UTF-8等。 可以使用Python内置的chardet模块来检测文件的编码格式。使用方法如下: import chardet…

    python 2023年5月20日
    00
  • python中argparse模块用法实例详解

    Python中argparse模块用法实例详解 argparse是Python标准库中的一个命令行解析模块,可以帮助开发者轻松地编写命令行接口。以下是Python中argparse模块用法实例详解: 基本用法 以下是一个基本的示例,演示如何使用argparse模块解析命令行参数: import argparse parser = argparse.Argum…

    python 2023年5月14日
    00
  • Python初学者需要注意的事项小结(python2与python3)

    Python初学者需要注意的事项小结(python2与python3) Python是一门非常适合初学者学习的编程语言,在学习的过程中,初学者需要注意一些事项,尤其对于Python2与Python3版本的区别需要特别注意。在这里,我们来总结一下初学者需要注意的事项。 注意Python版本 Python2和Python3有一些不同之处,其中最主要的不同就在于P…

    python 2023年5月14日
    00
  • Python 语法错误:”SyntaxError: invalid character in identifier”原因及解决方法

    当我们在编写Python代码时,如果使用了无效的字符(如空格、下划线等非法字符)作为变量名、函数名或类名的一部分,就会出现“SyntaxError: invalid character in identifier”这个语法错误。 错误示例1:使用空格作为变量名 # 错误示例1 my var = 10 print(my var) 错误示例2:使用非法字符“-”…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部