已有一个10个元素的整形数组a,且按值从小到大有序。输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出"Not Found"。。 要求编写函数int Bsearch(int *p, int n, int x),找到返回下标,找不到返回-1。 函数接口定义: int Bsearch(int *p, int n, int x); 其中 p是数组首地址,n是数组元素个数,x是要查找的值。找到返回下标,找不到返回-1。
时间: 2023-03-05 12:41:08 浏览: 201
可以使用二分查找算法实现这个功能,以下是函数的代码实现:
```c
int Bsearch(int *p, int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (p[mid] == x) {
return mid; // 找到返回下标
} else if (p[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 找不到返回-1
}
```
这个函数的实现中,使用 left 和 right 表示查找范围的左右边界,mid 表示中间位置。每次将要查找的区间缩小一半,直到找到或者无法找到为止。
具体来说,每次将中间位置的值与要查找的值比较,如果相等就返回中间位置的下标,如果中间位置的值小于要查找的值,就在右半部分继续查找,否则就在左半部分继续查找。
如果整个过程中没有找到要查找的值,就返回 -1 表示未找到。
使用示例:
```c
#include <stdio.h>
int Bsearch(int *p, int n, int x);
int main() {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int x = 7;
int index = Bsearch(a, 10, x);
if (index >= 0) {
printf("找到了,下标是 %d\n", index);
} else {
printf("Not Found\n");
}
return 0;
}
int Bsearch(int *p, int n, int x) {
// ...
}
```
输出结果:
```
找到了,下标是 6
```
阅读全文