已有一个10个元素的整形数组a,且按值从小到大有序。输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出"Not Found" 要求编写函数int Bsearch(int *p, int n, int x),找到返回下标,找不到返回-1
时间: 2024-12-13 17:27:51 浏览: 30
这是一个二分查找(Binary Search)的问题,可以利用已排序数组的特点高效地定位目标元素。BSearch函数的基本思路如下:
1. 初始化两个指针,`low`表示搜索区间的开始下标(通常是0),`high`表示结束下标(初始为n-1,数组长度减一)。
2. 当`low`小于等于`high`时,继续循环:
a. 计算中间位置`mid`,通常为`(low + high) / 2`。
b. 比较中间元素`p[mid]`与`x`的大小:
- 如果`p[mid]`正好等于`x`,返回`mid`作为元素的下标。
- 如果`p[mid]`大于`x`,说明`x`可能在左半部分,将`high`设置为`mid - 1`。
- 否则,如果`p[mid]`小于`x`,说明`x`可能在右半部分,将`low`设置为`mid + 1`。
3. 如果遍历完整个区间都没有找到`x`,返回-1表示未找到。
以下是BSearch函数的伪代码实现:
```c
int Bsearch(int* p, int n, int x) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (p[mid] == x)
return mid;
else if (p[mid] > x)
high = mid - 1;
else
low = mid + 1;
}
// Not found
return -1;
}
```
阅读全文