二分查找(Binary Search)是一种在有序数组中查找目标值的算法。它的基本思想是将数组分成两半,判断目标值是否在左半部分或右半部分,然后递归地在相应的半部分中查找。这个过程不断重复,直到找到目标值或者确定目标值不存在为止。二分查找的时间复杂度为 O(logn),其中 n 是数组的长度。
使用二分查找的条件是:数组是有序的,且数组元素具有比较运算符。
场景案例:
- 在一个电话号码簿中查找某个人的电话号码。
- 在一个有序的文件列表中查找某个文件。
- 在一个数据库中根据某个关键字查找记录。
Demo:
示例代码
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
示例数组
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
示例目标值
target = 13
调用二分查找函数
result = binary_search(arr, target)
输出结果
if result != -1:
print(f"元素 {target} 在数组中的索引为 {result}")
else:
print(f"元素 {target} 不在数组中")
CopyCopy
在这个示例中,我们定义了一个名为 binary_search 的函数,它接受一个有序数组 arr 和一个目标值 target。函数通过二分查找算法在数组中查找目标值,如果找到,则返回目标值在数组中的索引;如果没有找到,则返回 -1。