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

目录
  • 使用递归进行二分查找搜索
  • 使用迭代进行搜索
  • 使用内置 bisect 模块

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

  • 将 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二分查找搜索算法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

您可能感兴趣的文章:

  • Python优雅实现二分查找的示例详解
  • 使用Python实现二分法查找的示例
  • Python实现二分法查找及优化的示例详解
  • Python 二分查找之bisect库的使用详解
  • Python算法练习之二分查找算法的实现
  • 详解Python查找算法的实现(线性,二分,分块,插值)
  • Python语言实现二分法查找
  • python二分法查找函数底值
  • python二分法查找实例代码
  • python中二分查找法的实现方法
  • python实现二分查找算法

Published by

风君子

独自遨游何稽首 揭天掀地慰生平