二进制搜索的Python程序(递归和迭代)

简言之,这种搜索算法利用了一组元素,这些元素在仅仅一次比较后就忽略了一半的元素。

null
  1. 将x与中间的元素进行比较。
  2. 如果x与中间元素匹配,则返回中间索引。
  3. 否则,如果x大于中间元素,则x只能位于中间元素后的右(大)半子阵列中。然后我们对右半部分再次应用算法。
  4. 否则,如果x较小,则目标x必须位于左(下)半部分。所以我们对左半部分应用算法。

递归:

Python3

# 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

迭代:

Python3

# 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

请参考文章 二进制搜索 更多细节!

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享