用C语言编写以下程序:有15个数按从大到小存放在一个数组中,输入一个数,用折半查找法找出该数是数组中的第几个数,若该数不在数组中,则输出“无此数”
时间: 2024-10-28 13:08:03 浏览: 19
C语言程序设计-编写函数fun将一个数组中的值按逆序存放,并在main()函数中输出;
4星 · 用户满意度95%
折半查找法,也称为二分查找,是一种高效的搜索算法。要在C语言中实现这个功能,首先需要对数组进行排序,然后编写一个函数来执行查找。以下是简单的步骤:
1. 定义一个函数 `binary_search`,它接收两个指针 `arr` 和 `low`、`high` 分别表示数组的首地址和范围的下界。
2. 确定中间索引 `mid`,计算公式为 `(low + high) / 2` 并向下取整。
3. 比较目标值 `target` 与数组中间元素 `arr[mid)` 的大小:
- 如果相等,返回 `mid` 表示找到位置;
- 如果目标值大于中间元素,说明目标在右半部分,将 `low` 设置为 `mid + 1` 进行下一轮查找;
- 否则,如果目标值小于中间元素,说明目标在左半部分,将 `high` 设置为 `mid - 1`。
4. 当 `low` 大于 `high` 时,说明目标不存在于数组中,返回 `-1` 或者提示 "无此数"。
下面是具体的C语言代码实现:
```c
#include <stdio.h>
#include <limits.h>
int binary_search(int arr[], int size, int target) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target)
return mid; // 找到了目标
else if (arr[mid] > target)
high = mid - 1; // 目标在左边
else
low = mid + 1; // 目标在右边
}
return -1; // 没有找到目标,返回-1
}
int main() {
int numbers[15] = {/* 假设已排序的15个数 */};
int n = sizeof(numbers) / sizeof(numbers[0]);
int num_to_find;
printf("请输入一个数:");
scanf("%d", &num_to_find);
int position = binary_search(numbers, n, num_to_find);
if (position != -1)
printf("%d 在数组中的位置是 %d\n", num_to_find, position);
else
printf("%d 无此数\n", num_to_find);
return 0;
}
```
阅读全文