改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
时间: 2023-05-27 09:07:28 浏览: 89
以下是改写后的二分搜索算法:
```python
def binary_search(arr, x):
low = 0
high = len(arr) - 1
i = None # 初始化i和j为None
j = None
while low <= high:
mid = (low + high) // 2
if arr[mid] == x:
i = j = mid # x在数组中,i和j均为x在数组中的位置
break
elif arr[mid] < x:
i = mid # 更新i为小于x的最大元素位置
low = mid + 1
else:
j = mid # 更新j为大于x的元素位置
high = mid - 1
if i is None: # 当x不在数组中时
if j is None:
return None # 数组为空,无法返回i和j
return None, j
elif j is None:
return i, None
return i, j
```
当x不在数组中时,如果j为None则说明数组中所有元素都小于x,i为len(arr)-1;反之,如果i为None则说明数组中所有元素都大于x,j为0。如果数组为空,则无法返回i和j,返回None。
阅读全文