二分查找返回关键值key在长度为len的数组arr[]中的位置,没有key则返回-1 用C语言编写
时间: 2024-09-10 17:23:19 浏览: 52
C语言实现折半查找法(二分法)
5星 · 资源好评率100%
二分查找是一种高效的查找算法,它适用于有序数组。在二分查找过程中,首先将数组的中间元素与待查找的关键值进行比较,如果两者相等,则找到了关键值的位置;如果关键值小于中间元素,则在数组的左半部分继续查找;如果关键值大于中间元素,则在数组的右半部分继续查找。这个过程会不断重复,直到找到关键值或搜索区间为空。
以下是使用C语言实现二分查找的代码示例:
```c
#include <stdio.h>
// 二分查找函数
int binary_search(int arr[], int len, int key) {
int low = 0;
int high = len - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2; // 计算中间位置
if (arr[mid] == key) {
return mid; // 找到关键值,返回位置
} else if (arr[mid] < key) {
low = mid + 1; // 在右半部分查找
} else {
high = mid - 1; // 在左半部分查找
}
}
return -1; // 没有找到关键值,返回-1
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int len = sizeof(arr) / sizeof(arr[0]);
int key = 9;
int result = binary_search(arr, len, key);
if (result != -1) {
printf("元素 %d 在数组中的位置为: %d\n", key, result);
} else {
printf("元素 %d 在数组中未找到。\n", key);
}
return 0;
}
```
在这个例子中,`binary_search` 函数接收一个有序数组 `arr`、数组长度 `len` 和要查找的关键值 `key` 作为参数。函数通过不断地将查找范围缩小到一半,最终定位到关键值的位置或者确定数组中不存在该关键值,并返回相应的位置索引或 `-1`。
阅读全文