用C语言写一个二分查找代码
时间: 2023-12-29 18:50:17 浏览: 40
以下是一个示例代码:
```c
#include <stdio.h>
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;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int index = binarySearch(arr, 0, n - 1, target);
if (index == -1) {
printf("Target not found\n");
} else {
printf("Target found at index %d\n", index);
}
return 0;
}
```
解释:
- `binarySearch` 函数实现了二分查找算法,接收一个有序数组 `arr`,以及要查找的目标值 `target`。`left` 和 `right` 参数表示搜索区间的左右边界,一开始分别设置为数组的第一个和最后一个元素的下标。
- 在循环中,计算出中间元素的下标 `mid`,并判断中间元素和目标值的大小关系。
- 如果中间元素等于目标值,直接返回该下标。
- 如果中间元素小于目标值,将左边界更新为 `mid + 1`,继续在右侧查找。
- 如果中间元素大于目标值,将右边界更新为 `mid - 1`,继续在左侧查找。
- 如果没有找到目标值,最终返回 -1。
在 `main` 函数中,创建一个有序数组 `arr`,并调用 `binarySearch` 函数查找目标值 5。如果找到,打印目标值在数组中的下标,否则打印未找到的提示。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)