用c语言写一个现有一个数组,数组元素为33,15,58,26,7,49,要求输入一个数,用折半查找找出该数是数组中的第几个元素的值;如果该数不在数组中,则输出“无此数”
时间: 2024-12-04 18:25:54 浏览: 15
在 C 语言中,你可以使用二分查找算法(也称折半查找)来找到数组中特定数值的位置。下面是一个简单的示例,假设数组已经按升序排列:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 避免整数溢出
if (arr[mid] == target) {
return mid; // 找到目标,返回其索引
} else if (arr[mid] < target) {
left = mid + 1; // 目标大于中间元素,搜索右半部分
} else {
right = mid - 1; // 目标小于中间元素,搜索左半部分
}
}
// 数组中不存在目标元素
return -1;
}
int main() {
int arr[] = {33, 15, 58, 26, 7, 49};
int n = sizeof(arr) / sizeof(arr[0]);
int target;
printf("请输入你要查找的数字: ");
scanf("%d", &target);
int index = binarySearch(arr, n, target);
if (index != -1) {
printf("该数在数组中的位置是 %d\n", index + 1); // 返回的是索引从0开始的
} else {
printf("无此数\n");
}
return 0;
}
```
在这个程序中,`binarySearch`函数接收一个排序好的整数数组、数组长度以及要查找的目标值。它通过不断将搜索范围缩小一半来寻找目标。如果没有找到目标,函数会返回-1。
阅读全文