函数为二分法查找key值。数组中元素已递增排序,若找到key则返回对应的下标,否则返回-1。
时间: 2023-06-02 14:07:00 浏览: 311
好的,这是一个关于算法的问题,我能为您解答。以下是二分查找的实现方式:
```
int binarySearch(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
其中,参数 `arr` 是已经排好序的数组,`left` 和 `right` 是对应要查找的范围,`key` 是要查找的值。函数会不断取数组中间的值进行比较,缩小查找的范围,直到找到该值或者范围缩小到无法查找为止。如果找到了,则返回对应的下标,否则返回 -1。
相关问题
二分法查找返回关键值key在长度为len的数组arr[]中的位置,没有key则返回-1 int bi_search(int key,int arr[],int len)
二分法查找是一种在有序数组中查找特定元素的高效算法。其基本思想是将数组分成两半,通过比较中间元素与目标值的大小,确定目标值所在的那一半,然后继续在那一半数组中查找,直到找到目标值或者确定目标值不存在于数组中。
下面是用C语言实现的二分查找函数:
```c
int bi_search(int key, int arr[], int len) {
int low = 0;
int high = len - 1;
int mid;
while (low <= high) {
mid = low + (high - low) / 2; // 防止溢出的写法
if (arr[mid] == key) {
return mid; // 找到key,返回其位置索引
} else if (arr[mid] < key) {
low = mid + 1; // 如果中间值小于key,则在右侧子数组中查找
} else {
high = mid - 1; // 如果中间值大于key,则在左侧子数组中查找
}
}
return -1; // 如果没有找到key,返回-1
}
```
二分查找的前提是数组必须是有序的。如果数组未排序,则无法使用二分查找。这个函数在数组中查找给定的关键值`key`,如果找到则返回其在数组中的位置索引,否则返回-1。
阅读全文