python 二分查找
当您需要在一个已排序的列表中查找某个元素时,可以使用二分查找(Binary Search)算法。以下是一个Python实现的二分查找算法示例:
python
def binary_search(arr, target):
"""
在已排序的列表arr中查找目标值target
如果找到目标值,返回其索引;否则返回-1
"""
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
guess = arr[mid]
if guess == target:
return mid # 找到目标值,返回其索引
if guess > target:
high = mid - 1 # 目标值在左半部分
else:
low = mid + 1 # 目标值在右半部分
return -1 # 没有找到目标值
# 使用示例
sorted_array = [1, 3, 5, 7, 9]
target_value = 5
result = binary_search(sorted_array, target_value)
if result != -1:
print(f"找到目标值 {target_value} 在索引 {result}")
else:
print(f"未找到目标值 {target_value}")
在这个示例中,binary_search函数接受一个已排序的列表arr和一个目标值target作为参数。它使用low和high两个指针来标记当前搜索范围的左右边界。在每次循环中,它都会计算中间位置mid,然后检查该位置的值是否与目标值相等。如果相等,则返回该索引;如果中间值大于目标值,说明目标值(如果存在)必定在左半部分,因此更新high为mid - 1;如果中间值小于目标值,说明目标值(如果存在)必定在右半部分,因此更新low为mid + 1。如果循环结束后仍未找到目标值,则返回-1。
注意:二分查找算法要求列表必须是已排序的。如果列表未排序,需要先进行排序操作。