📅  最后修改于: 2023-12-03 15:37:14.511000             🧑  作者: Mango
这是一道关于二分查找的算法题。以下是该问题的题面:
给定一个已排序的 n 个元素的数组,要使用二分查找算法确定一个元素 x 是否在数组中。二分查找算法的每一次比较都使得搜索范围缩小一半。
请写出二分查找的实现,并返回元素 x 在数组中的索引值。若 x 不在数组中,则返回 -1。
二分查找的基本思路是:首先取整个数组的中间元素 mid,然后与待查找元素 x 进行比较。
若 x 等于 mid,返回 mid 的下标。
若 x 小于 mid,则在数组的左半边寻找。
若 x 大于 mid,则在数组的右半边寻找。
以上过程是递归的。
以下是二分查找的 Python 代码实现:
def binary_search(arr, x, low, high):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, x, low, mid - 1)
else:
return binary_search(arr, x, mid + 1, high)
else:
return -1
传入参数为:
输入以下参数:
arr = [1, 3, 5, 7, 9]
x = 3
low = 0
high = len(arr) - 1
运行该函数:
binary_search(arr, x, low, high)
输出结果:
1 # 即元素 3 在数组 arr 中的索引为 1
输入以下参数:
arr = [1, 3, 5, 7, 9]
x = 4
low = 0
high = len(arr) - 1
运行该函数:
binary_search(arr, x, low, high)
输出结果:
-1 # 即元素 4 不在数组 arr 中
二分查找是一种基于分治思想的查找算法,其时间复杂度为 O(log n)。该算法假定所查找的数组是有序的,因此需要对数组进行排序。由于排序成本额外的开销,对于不经常变化的数据集,二分查找算法的效率比较高。