写出二分法查找的代码(arr为按升序排列的数组,key为待查找的元素,n为数组长度,返回值为key所在的元素的下标,未找到返回-1)(搜索算法)备注:int binary_search(int *arr, int key, int n)
时间: 2024-03-28 11:41:28 浏览: 51
好的,这是二分查找的代码实现:
```
int binary_search(int *arr, int key, int n) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
二分法查找是一种高效的查找算法,它的时间复杂度为O(logn)。在每次比较的时候,都可以将查找区间缩小一半,直到找到或者区间为空。
相关问题
请根据以下内容写出可以执行的代码:二分法查找返回关键值key在长度为len的数组arr[]中的位置,没有key则返回-1 int bi_search(int key,int arr[],int len)
以下是使用二分查找算法的`bi_search`函数的C语言实现代码:
```c
#include <stdio.h>
int bi_search(int key, int arr[], int len) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == key) {
return mid; // 找到key,返回位置索引
} else if (arr[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 未找到key,返回-1
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17};
int len = sizeof(arr) / sizeof(arr[0]);
int key = 9;
int position = bi_search(key, arr, len);
if (position != -1) {
printf("找到关键值 %d 在数组中的位置:%d\n", key, position);
} else {
printf("在数组中未找到关键值 %d\n", key);
}
return 0;
}
```
这段代码定义了一个`bi_search`函数,它使用二分查找算法来寻找一个关键值`key`在数组`arr[]`中的位置。如果找到了`key`,就返回它在数组中的索引位置;如果没有找到,则返回`-1`。在`main`函数中,我们创建了一个数组并调用`bi_search`函数来测试其功能。
二分法查找返回关键值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。
阅读全文