运用C语言。某数组已按照从大到小的顺序排列,其数组元素为:{98,87,81,79,52,49,33,21,18,6},编程使用二分查找法查找81是否在该数组中,若在该数组中,输出“81在该数组中的第X位”(X为数组中的第几个数),否则输出“81不在数组中”。
时间: 2024-05-03 18:20:09 浏览: 68
C语言基础-leetcode编程题解之第81题搜索旋转排序数组II.zip
好的,您的问题是运用C语言编写二分查找法,查找81是否在一个已排好序的数组中,是吗?
以下是代码实现:
```c
#include <stdio.h>
int binary_search(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2; //计算中间位置的索引
if (arr[mid] == target) {
return mid; //找到目标值,返回该值的索引
}
else if (arr[mid] > target) {
right = mid - 1; //目标值在左半部分,缩小查找范围
}
else {
left = mid + 1; //目标值在右半部分,缩小查找范围
}
}
return -1; //目标值不存在于数组中,返回-1
}
int main() {
int arr[] = {98, 87, 81, 79, 52, 49, 33, 21, 18, 6};
int target = 81;
int len = sizeof(arr) / sizeof(arr[0]);
int result = binary_search(arr, 0, len - 1, target);
if (result == -1) {
printf("81不在数组中");
}
else {
printf("81在该数组中的第%d位", result + 1);
}
return 0;
}
```
本程序中,通过参数left、right确定查找范围,每次缩小一半,直到找到目标值或查找范围不存在目标值。如果最终查找失败,函数返回-1,说明目标值不在数组中。如果查找成功,返回目标值的索引值加1,说明目标值在数组的第几位。
阅读全文