python二分查找搜索算法的多种实现方法

 更新时间:2024年03月06日 14:50:25   作者:星星猫  
二分查找,也称折半查找,是一种效率较高的查找方法,本文主要介绍了python二分查找搜索算法的多种实现方法,具有一定的参考价值,感兴趣的可以了解一下

二分查找搜索算法利用了元素集合,这些元素在一次比较后就忽略了一半的元素,从而进行了排序。

  • 将 x 与中间元素进行比较。
  • 如果 x 与中间元素匹配,则返回中间索引。
  • 否则,如果 x 大于 mid 元素,则 x 只能位于 mid 元素之后的右(大)半子数组中。然后,我们再次将该算法应用于右半部分。
  • 否则,如果 x 较小,则目标 x 必须位于左(下)半部分。因此,我们将算法应用于左半部分。

使用递归进行二分查找搜索

# Python 3 program for recursive binary search.
# Modifications needed for the older Python 2 are found in comments.

# Returns index of x in arr if present, else -1
def binary_search(arr, low, high, x):

    # Check base case
    if high >= low:

        mid = (high + low) // 2

        # If element is present at the middle itself
        if arr[mid] == x:
            return mid

        # If element is smaller than mid, then it can only
        # be present in left subarray
        elif arr[mid] > x:
            return binary_search(arr, low, mid - 1, x)

        # Else the element can only be present in right subarray
        else:
            return binary_search(arr, mid + 1, high, x)

    else:
        # Element is not present in the array
        return -1

# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10

# Function call
result = binary_search(arr, 0, len(arr)-1, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

输出

Element is present at index 3

使用迭代进行搜索

# Iterative Binary Search Function
# It returns index of x in given array arr if present,
# else returns -1
def binary_search(arr, x):
    low = 0
    high = len(arr) - 1
    mid = 0

    while low <= high:

        mid = (high + low) // 2

        # If x is greater, ignore left half
        if arr[mid] < x:
            low = mid + 1

        # If x is smaller, ignore right half
        elif arr[mid] > x:
            high = mid - 1

        # means x is present at mid
        else:
            return mid

    # If we reach here, then the element was not present
    return -1


# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10

# Function call
result = binary_search(arr, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

输出

Element is present at index 3

使用内置 bisect 模块

循序渐进的方法:

  • 该代码导入 bisect 模块,该模块提供对二进制搜索的支持。
  • 定义了 binary_search_bisect() 函数,该函数将数组 arr 和搜索 x 的元素作为输入。
  • 该函数调用 bisect 模块的 bisect_left() 函数,该函数在排序数组 arr 中查找元素的位置,其中应插入 x 以保持排序顺序。如果该元素已存在于数组中,则此函数将返回其位置。
  • 然后,该函数检查返回的索引 i 是否在数组范围内,以及该索引处的元素是否等于 x。
  • 如果条件为 true,则该函数返回索引 i 作为元素在数组中的位置。
  • 如果条件为 false,则该函数返回 -1,指示该元素不存在于数组中。
  • 然后,代码定义一个数组 arr 和一个要搜索的元素 x。
  • 使用 arr 和 x 作为输入调用 binary_search_bisect() 函数,返回的结果存储在 result 变量中。
  • 然后,代码检查结果是否不等于 -1,指示该元素存在于数组中。如果为 true,则打印元素在数组中的位置。
  • 如果结果等于 -1,则代码将打印一条消息,指出该元素在数组中不存在。
import bisect

def binary_search_bisect(arr, x):
    i = bisect.bisect_left(arr, x)
    if i != len(arr) and arr[i] == x:
        return i
    else:
        return -1


# Test array
arr = [2, 3, 4, 10, 40]
x = 10

# Function call
result = binary_search_bisect(arr, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

输出

Element is present at index 3

到此这篇关于python二分查找搜索算法的多种实现方法的文章就介绍到这了,更多相关python二分查找搜索算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas日期处理之生成工作日与节假日

    Pandas日期处理之生成工作日与节假日

    Python中的Pandas 提供了许多日期处理功能,使得处理时间序列数据变得容易。本文将介绍如何使用 Pandas 生成工作日和节假日,感兴趣的小伙伴可以收藏一下
    2023-05-05
  • Pyhton模块和包相关知识总结

    Pyhton模块和包相关知识总结

    文中详细整理了关于Python模块和包的相关知识点,刚入门Python的小伙伴们可以学习一下,有助于加深Python基础的理解.而且有详细说明及代码示例,需要的朋友可以参考下
    2021-05-05
  • 解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题

    解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题

    今天小编就为大家分享一篇解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解python之异步编程

    详解python之异步编程

    这篇文章主要为大家介绍了python之异步编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-12-12
  • Python实现获取网页内容及自动填表单与登录功能

    Python实现获取网页内容及自动填表单与登录功能

    这篇文章主要为大家详细介绍了如何利用Python实现模拟浏览器启动,获取网页内容、自动填表单、自动登录、自动过验证码等功能,需要的可以参考一下
    2023-03-03
  • 全面解析Python的While循环语句的使用方法

    全面解析Python的While循环语句的使用方法

    这篇文章主要介绍了全面解析Python的While循环语句的使用方法,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    Flask是一个Python编写的Web微框架,使用Python语言快速实现一个网站或Web服务,本期教程我们使用Python Flask搭建一个web问答应用程序框架,并结合cpolar内网穿透工具将我们的应用程序发布到公共网络上,实现可多人远程进入到该web应用程序访问,需要的朋友可以参考下
    2023-12-12
  • 解决pyCharm中 module 调用失败的问题

    解决pyCharm中 module 调用失败的问题

    今天小编就为大家分享一篇解决pyCharm中 module 调用失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Pycharm小白级简单使用教程

    Pycharm小白级简单使用教程

    pycharm是一种Python IDE,能够帮助我们在编写代码时提高效率。 这篇文章主要介绍了Pycharm小白级简单使用教程,需要的朋友可以参考下
    2020-01-01
  • django 简单实现登录验证给你

    django 简单实现登录验证给你

    这篇文章主要介绍了django 简单实现登录验证给你,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论