C语言,n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
时间: 2024-05-03 22:16:30 浏览: 64
好的,这是一个经典的二分查找问题。我们可以按照以下步骤:
1. 定义一个数组来存储这n个整数。
2. 定义两个指针,left和right,分别指向数组的第一个和最后一个元素。
3. 循环执行以下步骤,直到left>right:
- 计算中间位置mid=(left+right)/2。
- 如果待查找的数m等于数组中第mid个元素,则返回mid。
- 如果待查找的数m小于数组中第mid个元素,则更新right=mid-1。
- 如果待查找的数m大于数组中第mid个元素,则更新left=mid+1。
4. 如果在循环过程中没有找到待查找的数m,则返回-1表示未找到。
下面是相应的C语言代码实现:
```c
#include <stdio.h>
int binary_search(int arr[], int n, int m) {
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 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[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int n = sizeof(arr) / sizeof(int);
int m = 11;
int res = binary_search(arr, n, m);
if (res == -1) {
printf("未找到!\n");
} else {
printf("找到了,下标是%d\n", res);
}
return 0;
}
```
阅读全文