编写函数,用二分法在有序工号列表中查找元素,找到则返回下标,找不到则返回-1
时间: 2024-05-05 17:17:50 浏览: 85
好的,这个问题很有意思!这是一个常见的算法问题,我们可以通过二分法来加强查找的效率。下面是一个用 Python 编写的二分查找函数的示例:
```
def binary_search(lst, target):
low, high = 0, len(lst) - 1
while low <= high:
mid = (low + high) // 2
if lst[mid] == target:
return mid
elif lst[mid] > target:
high = mid - 1
else:
low = mid + 1
return -1
```
这个函数接受两个参数:一个有序列表 lst 和待查找元素 target。它返回查找到的元素的下标,如果找不到,则返回 -1。
请问,还有什么问题我可以帮到您呢?
相关问题
用二分法在有序数组a中查找元素value,如果找到,则返回相应的下标;如果没有找到,则返回-1。
可以使用二分查找算法来在有序数组中查找元素。以下是一个示例Python代码实现:
```python
def binary_search(a, value):
left = 0
right = len(a) - 1
while left <= right:
mid = (left + right) // 2
if a[mid] == value:
return mid
elif a[mid] < value:
left = mid + 1
else:
right = mid - 1
return -1
```
这个函数接受两个参数,一个是有序数组a,另一个是需要查找的元素value。它首先初始化左右指针为数组的开头和结尾。然后,它在循环中计算中间指针的值。如果中间的值等于要查找的值,则返回中间指针的位置。如果中间的值比要查找的值小,则将左指针更新为中间指针加1,否则将右指针更新为中间指针减1。如果最终没有找到要查找的值,则返回-1。
这个算法的时间复杂度为O(log n),其中n是数组的长度。这是因为每次可以将搜索范围缩小一半,直到找到要查找的值或者搜索范围为空。
用二分法在有序数组a中查找元素value,如果找到,则返回相应的下标;如果没有找到,则返回-1。c语言
下面是用二分法在有序数组a中查找元素value的C语言代码:
```c
int binarySearch(int a[], int n, int value) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == value) {
return mid;
} else if (a[mid] > value) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
```
其中,a是有序数组,n是数组长度,value是要查找的元素。left表示当前查找范围的左端点,right表示当前查找范围的右端点。在每一轮循环中,先计算中间位置mid,如果a[mid]等于value,则直接返回mid;如果a[mid]大于value,则说明value在左半部分,将right更新为mid-1;如果a[mid]小于value,则说明value在右半部分,将left更新为mid+1。如果最终没有找到value,则返回-1。
阅读全文