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中使用NumPy对切比雪夫级数进行积分并设置积分的下限

    首先,我们需要导入NumPy和SciPy库中的integrate模块用于积分。代码示例: import numpy as np from scipy import integrate 接着,我们需要定义切比雪夫级数。代码示例: def chebyshev_func(x, n): return np.cos(n * np.arccos(x)) 其中x为自变量,…

    python-answer 2023年3月25日
    00
  • python列表的构造方法list()

    以下是“Python列表的构造方法list()”的详细攻略。 Python列表的构造方法list() 在Python中,列表是一种常见的数据类型,它可以存储多个值。Python提供了list()来创建一个新的列表。list()方法可以接受一个可迭代对象作为参数,例如字符串、元组、集合等。list()方法将可迭代对象转换为列表,并返回该列表。 list()方法…

    python 2023年5月13日
    00
  • Python面向对象编程(三)

    以下是关于 Python 面向对象编程(三)的完整攻略: 问题描述 在 Python 面向对象编程中,继承是重要的概念。继承允许我们创建一个新的类,该类继承了一个类的属性和方法。本文将介绍如何在 Python 中使用继承。 解决方法 使用以下步骤解决 Python 面向对象编程中的继承问题: 创建一个父类。 在 Python 中,可以使用 class 关键字…

    python 2023年5月13日
    00
  • 在python win系统下 打开TXT文件的实例

    下面是在 Python Windows系统下打开TXT文件的完整攻略。 攻略一:使用open函数打开TXT文件 首先,使用open函数打开TXT文件。语法是:open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=Non…

    python 2023年5月20日
    00
  • Python中用xlwt制作表格实例讲解

    以下是Python中用xlwt制作表格实例讲解的完整实例教程: 目录 xlwt模块简介 创建Excel文件 创建工作表 添加数据到工作表 保存Excel文件 完整实例演示 示例说明 1. xlwt模块简介 xlwt是Python中的第三方库,用于创建和操作.xls格式(Excel 97-2003)文件。 2. 创建Excel文件 首先需要导入xlwt模块,并…

    python 2023年5月13日
    00
  • Python日期格式和字符串格式相互转换的方法

    Python中常用的日期格式有多种,常见的包括ISO日期、美国日期等。有时候我们需要将日期格式和字符串格式相互转换,方便在处理数据的时候进行统一处理。下面是Python日期格式和字符串格式相互转换的方法攻略。 1. Python日期格式转换为字符串格式 在Python中,日期对象(如datetime.date和datetime.datetime对象)可以使用…

    python 2023年6月2日
    00
  • Python读写文件基础知识点

    当涉及Python文件读写时,我们需要了解几个基本知识点。 文件打开/关闭 我们需要使用open()方法打开文件。open()方法接受文件路径和打开模式等参数。打开模式有读模式(r),写模式(w)和追加模式(a)。 # 以读模式打开文件 file = open(‘file.txt’, ‘r’) # 以写模式打开文件 file = open(‘file.txt…

    python 2023年6月5日
    00
  • Python编程获取终端命令行参数示例

    下面是关于“Python编程获取终端命令行参数示例”的完整攻略。 标准库argparse模块 Python标准库中提供了argparse模块,可以用于解析命令行参数。该模块通过定义参数的类型及其相应的选项来解析命令行参数。下面是一个简单的示例: import argparse parser = argparse.ArgumentParser() parser…

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