现有一个已排序的数组,请使用递归二分法查找出元素第一次出现的位置
时间: 2024-02-05 16:11:27 浏览: 147
好的,下面是二分查找的递归实现代码:
```python
def binary_search(arr, target, left, right):
if left > right:
return -1
mid = (left + right) // 2
if arr[mid] == target:
if mid == 0 or arr[mid-1] != target: # 判断是否是第一次出现
return mid
else:
return binary_search(arr, target, left, mid-1)
elif arr[mid] > target:
return binary_search(arr, target, left, mid-1)
else:
return binary_search(arr, target, mid+1, right)
```
其中,arr是已排序的数组,target是要查找的目标元素,left和right分别是当前查找范围的左右边界。
在二分查找中,每次取中间值mid,如果mid等于目标元素target,则找到了目标元素。但是,我们还要判断当前mid是不是第一次出现的位置,如果是,则直接返回mid;否则,继续在左半部分查找。
如果mid大于目标元素target,则说明目标元素在左半部分,我们继续在左半部分进行查找。
如果mid小于目标元素target,则说明目标元素在右半部分,我们继续在右半部分进行查找。
如果left > right,则说明目标元素不在数组中,返回-1表示未找到。
最后,我们可以调用binary_search函数来查找元素第一次出现的位置:
```python
arr = [1, 2, 3, 3, 3, 4, 5, 6]
target = 3
index = binary_search(arr, target, 0, len(arr)-1)
print(index)
```
输出结果为:2
注意,这里的index表示的是目标元素在数组中第一次出现的位置,如果目标元素不在数组中,则输出-1。
阅读全文