二分搜索法x不在数组中返回小于x的最大整数的位置和大于x的最小元素的位置c语言代码
时间: 2024-09-18 11:13:28 浏览: 31
二分查找通常用于有序数组中寻找特定值。如果你想找到小于给定值 `x` 的最大整数以及大于 `x` 的最小整数的位置,可以稍微修改一般的二分查找算法。这里是一个简单的 C 语言代码示例:
```c
#include <stdio.h>
#define ARRAY_SIZE 100 // 假设数组长度
// 定义二分查找辅助函数,返回值表示目标区间
int binarySearch(int arr[], int low, int high, int target) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] > target)
high = mid - 1; // 目标在左半部分
else
low = mid + 1; // 目标在右半部分
}
return -1; // 如果没找到目标,返回 -1
}
void findAdjacentPositions(int arr[], int n, int x) {
int max_less_than_x = binarySearch(arr, 0, n - 1, x - 1); // 寻找小于 x 的最大值
int min_greater_than_x = binarySearch(arr, 0, n - 1, x + 1); // 寻找大于 x 的最小值
printf("小于 %d 的最大整数的位置: %d\n", x, max_less_than_x);
printf("大于 %d 的最小整数的位置: %d\n", x, min_greater_than_x);
}
int main() {
int arr[ARRAY_SIZE] = {1, 3, 4, 6, 8, 9, 11};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 7; // 示例值
findAdjacentPositions(arr, n, x);
return 0;
}
```
在这个代码中,`findAdjacentPositions` 函数首先对小于 `x` 和大于 `x` 的值分别执行二分查找,然后打印出结果。注意这个代码假设数组 `arr` 已经排序。
阅读全文