📅  最后修改于: 2023-12-03 15:39:53.968000             🧑  作者: Mango
该问题是关于算法和数据结构的问题,需要理解和解决常见的算法问题。
已知一个排序的数组$A$和一个值$x$,请写一个递归函数来搜索值$x$在$A$中的索引,如果$x$不在数组$A$中,则返回$-1$。
我们可以使用二分查找算法来解决这个问题。二分查找是一种效率非常高的搜索算法,可以在已排序的数组中搜索值。该算法将数组分成两半,并比较搜索值与中间元素的大小关系,根据结果决定在哪一半继续搜索。
二分查找算法可以用递归或非递归方式实现。这里我们将介绍递归实现方式。
功能签名如下:
def binary_search(arr, x, left, right):
"""
:param arr: 有序数组
:param x: 待查找元素
:param left: 数组左边界
:param right: 数组右边界
:return: 若找到返回元素下标,未找到则返回-1
"""
算法实现如下:
def binary_search(arr, x, left, right):
if right >= left:
mid = left + (right - left) // 2
# 若x在中间元素左边,则在左子数组中搜索
if arr[mid] > x:
return binary_search(arr, x, left, mid - 1)
# 若x在中间元素右边,则在右子数组中搜索
elif arr[mid] < x:
return binary_search(arr, x, mid + 1, right)
# 若x等于中间元素,则返回mid
else:
return mid
# 若元素不在数组A中,则返回-1
else:
return -1
二分查找的时间复杂度为$O(log(n))$,其中$n$为数组的长度。空间复杂度为$O(1)$。
本文介绍了如何使用递归算法实现二分查找,在已排序的数组中高效地查找元素。此算法比较简单,但是效率极高。同时,同样的思想也可以应用到其他算法问题中。