C语言将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
时间: 2024-12-02 13:21:39 浏览: 68
在C语言中,我们可以使用二分查找算法对已排序的整数数组进行查找。以下是基本步骤:
1. **初始化**:
- 定义两个指针,`low` 和 `high` 分别表示数组的起始位置(索引1)和结束位置(索引n)。
- 如果 `low` 小于等于 `high`,查找过程继续。
2. **中间元素**:
- 计算中间索引 `mid` 为 `(low + high) / 2`。
3. **比较**:
- 检查数组中的中间元素是否等于目标值 `m`。
- 如果相等,返回 `mid`,因为找到了目标值。
- 如果 `m` 小于中间元素,则在左半部分(下标范围 `low` 到 `mid - 1`)继续查找。
- 如果 `m` 大于中间元素,则在右半部分(下标范围 `mid + 1` 到 `high`)继续查找。
4. **递归或循环**:
- 更新指针,如果 `m` 更小,设置 `high = mid - 1`;反之,设置 `low = mid + 1`。
- 重复步骤2和3,直到找到目标值或 `low > high`(此时表明目标值不在数组中)。
5. **返回结果**:
- 如果 `low` 大于 `high`,返回 `-1` 或相应提示,表示未找到。
这里是一个简单的示例函数实现:
```c
int binary_search(int arr[], int n, int m) {
int low = 1;
int high = n;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == m)
return mid;
else if (arr[mid] < m)
low = mid + 1;
else
high = mid -1; // 如果没找到,返回-1
}
```
阅读全文