用控制了技术编写一个二分查找函数
时间: 2023-07-19 11:05:59 浏览: 37
好的,以下是一个使用二分查找算法查找整数列表中给定元素的Python代码:
```python
def binary_search(arr, x):
# 确定列表的左右边界
left = 0
right = len(arr) - 1
while left <= right:
# 找到中间元素的索引
mid = (left + right) // 2
# 检查中间元素是否等于要查找的元素
if arr[mid] == x:
return mid
# 如果中间元素大于要查找的元素,则在左半部分继续查找
elif arr[mid] > x:
right = mid - 1
# 如果中间元素小于要查找的元素,则在右半部分继续查找
else:
left = mid + 1
# 如果要查找的元素不在列表中,返回-1
return -1
```
这个函数接受两个参数:一个整数列表和一个要查找的整数。它返回要查找的整数在列表中的索引,如果要查找的整数不在列表中,则返回-1。
相关问题
C++编写一个二分查找函数
以下是C++编写的二分查找函数示例:
```c++
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2; // 计算中间位置
if (arr[mid] == target) { // 如果找到目标值,直接返回下标
return mid;
} else if (arr[mid] < target) { // 如果中间值小于目标值,缩小搜索范围到右半部分
left = mid + 1;
} else { // 如果中间值大于目标值,缩小搜索范围到左半部分
right = mid - 1;
}
}
return -1; // 如果未找到目标值,返回-1
}
```
该函数的参数说明:
- `arr[]`:表示需要进行查找的有序数组。
- `left`:表示需要查找的数组的起始下标。
- `right`:表示需要查找的数组的结束下标。
- `target`:表示需要查找的目标值。
函数使用while循环实现二分查找,每次计算中间位置,然后根据中间位置与目标值比较,缩小搜索范围。如果找到目标值,直接返回该元素的下标,否则最后返回-1表示未找到。
编写一个二分查找函数
二分查找(Binary Search)是一种针对有序数组的查找算法。它的基本思想是从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,并重复该过程,直到找到要查找的元素,或者查找范围为空。
以下是一个简单的 Python 实现:
```python
def binary_search(arr, low, high, x):
"""
在有序数组 arr 中查找元素 x
:param arr: 有序数组
:param low: 查找范围的左边界
:param high: 查找范围的右边界
:param x: 待查找的元素
:return: 如果找到了,返回元素下标;否则返回 -1
"""
# 基本情况:查找范围为空
if high < low:
return -1
# 找到查找范围的中间元素
mid = (low + high) // 2
# 如果中间元素是待查找元素,则返回下标
if arr[mid] == x:
return mid
# 如果中间元素比待查找元素大,则在数组的左半部分继续查找
elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x)
# 否则,在数组的右半部分继续查找
else:
return binary_search(arr, mid + 1, high, x)
```
使用示例:
```python
arr = [2, 3, 4, 10, 40]
x = 10
result = binary_search(arr, 0, len(arr) - 1, x)
if result != -1:
print("元素在数组中的下标为", result)
else:
print("元素不在数组中")
```
输出:
```
元素在数组中的下标为 3
```