n个从小到大排序的整数(n<1000000),从1~n排序,并一以一个待查找的整数m,请使用二分法进行查找
时间: 2024-12-06 07:21:42 浏览: 14
要使用二分查找算法在一个已排序的整数数组中查找一个特定的元素`m`,首先确保数组是从1到`n`按升序排列的。二分查找的基本步骤如下:
1. 初始化两个指针,通常称为`left`和`right`,分别指向数组的第一个和最后一个元素。
2. 计算中间索引`mid`,`mid = (left + right) / 2`。
3. 检查中间元素是否等于要查找的目标值`m`:
- 如果 `arr[mid] == m`,则找到了目标值,返回`mid`。
- 如果 `arr[mid] < m`,说明目标值可能在右半部分,将`left`更新为`mid + 1`。
- 如果 `arr[mid] > m`,说明目标值可能在左半部分,将`right`更新为`mid - 1`。
4. 重复步骤2和3,直到`left`大于或等于`right`,这意味着没有找到目标值,此时返回 `-1`表示未找到。
以下是一个简单的C语言实现:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int m) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == m)
return mid;
else if (arr[mid] < m)
left = mid + 1;
else
right = mid - 1;
}
return -1; // 当目标值不存在时返回-1
}
// 示例用法
int main() {
int arr[1000000];
// 假设arr已经填充好从1到n的数字
for (int i = 0; i < 1000000; i++) {
arr[i] = i + 1;
}
int m = 50; // 待查找的整数
int result = binarySearch(arr, 1000000, m);
if (result != -1)
printf("元素 %d 的位置是 %d\n", m, result);
else
printf("%d 不在数组中\n", m);
return 0;
}
```
阅读全文