首页 > Python基础教程 >
-
python二分查找搜索算法的多种实现方法
二分查找,也称折半查找,是一种效率较高的查找方法,本文主要介绍了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二分查找搜索算法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.51cto.com/u_14249042/9914955