利用二分查找法C语言
时间: 2025-06-01 09:16:50 浏览: 14
### C语言中实现二分查找法的教程与代码示例
二分查找是一种高效的搜索算法,适用于有序数组。其基本思想是通过不断将搜索区间缩小一半来快速定位目标值。以下是详细的实现步骤和代码示例。
#### 1. 算法思想
二分查找的核心在于每次比较中间元素与目标值的关系,从而决定继续在左半部分还是右半部分进行搜索。这种方法可以显著减少比较次数[^2]。
#### 2. 实现步骤
- 初始化两个指针 `left` 和 `right`,分别指向数组的起始位置和结束位置。
- 在循环中计算中间位置 `mid`,并比较 `arr[mid]` 与目标值的关系。
- 如果 `arr[mid]` 等于目标值,则返回其索引。
- 如果 `arr[mid]` 小于目标值,则调整 `left = mid + 1`。
- 如果 `arr[mid]` 大于目标值,则调整 `right = mid - 1`。
- 当 `left > right` 时,表示未找到目标值,返回 -1。
#### 3. 示例代码
以下是一个完整的二分查找实现代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int x) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防止溢出
if (arr[mid] == x) {
return mid; // 找到目标值,返回索引
} else if (arr[mid] < x) {
left = mid + 1; // 目标值在右半部分
} else {
right = mid - 1; // 目标值在左半部分
}
}
return -1; // 未找到目标值
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 有序数组
int n = sizeof(arr) / sizeof(arr[0]); // 数组长度
int x = 3; // 目标值
int result = binarySearch(arr, n, x); // 调用二分查找函数
if (result == -1) {
printf("Element is not present in array\n");
} else {
printf("Element is present at index : %d\n", result);
}
return 0;
}
```
#### 4. 注意事项
- 输入数组必须是有序的,否则结果可能不正确[^3]。
- 计算 `mid` 时使用 `left + (right - left) / 2` 而不是 `(left + right) / 2`,以避免整数溢出问题[^1]。
---
阅读全文
相关推荐


















