c 语音编写函数binSearch,传入按升序数组a、a中有效数据的个数,以及数据x,在a中查找x是否存在,若存在,则返回数组a中最大数的位置下标,否则返回-1。
时间: 2024-10-20 11:12:32 浏览: 13
在 C 语言中,你可以编写一个名为 `binSearch` 的二分查找函数,其基本思想是利用数组已排序的特点,通过比较中间元素和目标值来缩小搜索范围。以下是该函数的一个实现示例:
```c
#include <stdio.h>
int binSearch(int a[], int n, int x) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 中间位置计算
if (a[mid] == x) { // 如果找到目标值
// 如果找到的是数组中的最大值
if (mid == n - 1 || a[mid + 1] < x)
return mid;
else // 否则继续向右找最大值
left = mid + 1;
} else if (a[mid] < x) { // 目标值大于中间值,移到右侧
left = mid + 1;
} else { // 目标值小于中间值,移到左侧
right = mid - 1;
}
}
// 没有找到,返回 -1
return -1;
}
// 测试函数
int main() {
int a[] = {1, 3, 5, 6, 8, 9};
int n = sizeof(a) / sizeof(a[0]);
int x = 6;
int result = binSearch(a, n, x);
if (result != -1)
printf("找到了,元素在数组中的位置是 %d\n", result);
else
printf("未找到\n");
return 0;
}
```
在这个例子中,`binSearch` 函数接收三个参数:一个整型数组 `a`,数组的有效长度 `n`,以及需要查找的目标值 `x`。函数通过不断将搜索区间缩小到数组的一半直到找到目标值,或者区间为空(即 `left > right`),然后返回最大值的下标或 `-1`。
阅读全文