编写折半查找算法,并分析该算法的时间复杂度
时间: 2024-09-25 17:11:34 浏览: 38
折半查找(也称为二分查找)是一种高效的搜索算法,适用于有序数组或列表中查找特定元素。其基本思想是每次比较中间元素与目标值,然后根据它们的关系决定是在左半部分还是右半部分继续查找。如果目标值等于中间元素,则找到;如果目标值小于中间元素,则在左半部分重复查找;如果大于,则在右半部分查找,直到找到目标或确定不存在。
以下是一个简单的Python版本的折半查找算法:
```python
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1 # 如果没找到,返回-1表示目标不在数组中
# 示例
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
print(f"找到了,索引为 {result}")
else:
print("未找到")
```
时间复杂度分析:
- 最好情况:当目标值恰好位于数组正中间时,算法执行一次循环就终止,此时时间复杂度为 O(1)。
- 最坏情况:目标值不在数组中,需要遍历整个数组的一半次数,因此时间复杂度为 O(log n),其中 n 是数组长度。这是因为每一次迭代都会将搜索范围减半。
- 平均情况:类似最坏情况,平均时间复杂度也为 O(log n)。
阅读全文