1. 自学二分查找; 2. 给出伪码表示,并能解释算法复杂度。 3. 编写代码实现二分查找。给出实例,考虑异常。
时间: 2024-10-24 17:02:23 浏览: 33
1. 自学二分查找,也称为折半查找,是一种非常高效的搜索算法,适用于已排序的数组。基本步骤如下:
- 确定数组的起始位置(low)和结束位置(high)。
- 计算中间索引(mid = (low + high) // 2)。
- 比较目标值与中间元素:
- 如果相等,返回中间索引。
- 如果目标值小于中间元素,将high设为mid - 1,继续在左半部分查找。
- 否则,将low设为mid + 1,在右半部分查找。
- 当low > high时,说明目标值不存在于数组中,返回-1。
2. 以下是二分查找的伪代码:
```plaintext
function binarySearch(array, target):
low = 0
high = length(array) - 1
while low <= high:
mid = low + (high - low) // 2
if array[mid] == target:
return mid
else if array[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
```
算法复杂度分析:二分查找的时间复杂度是O(log n),这是因为每次迭代都将搜索范围减半。空间复杂度是O(1),因为它只需要几个变量存储临时信息,不随输入规模增长。
3. 编写Python代码实现二分查找,考虑到可能出现空数组或找不到目标的情况:
```python
def binary_search(arr, target):
try:
if not arr or len(arr) == 0:
raise ValueError("Array is empty")
low, high = 0, 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 # Target not found in the array
except ValueError as ve:
print(f"Error: {ve}")
# 示例
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
print(f"Element found at index: {result}")
else:
print("Element not found")
```
阅读全文