c语言有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
时间: 2024-12-04 18:29:11 浏览: 36
在C语言中,可以使用折半查找法(也称为二分查找),这是一种高效的查找算法,适用于有序数组。以下是实现步骤:
1. 定义一个函数,例如`binarySearch`,接受两个参数:存储有序数组的指针`arr`,数组长度`n`,以及需要查找的目标值`target`。
```c
int binarySearch(int arr[], int n, int target) {
```
2. 初始化两个指针,`low`表示数组开始索引(0),`high`表示数组结束索引(n - 1)。
3. 使用一个循环,当`low`小于等于`high`时继续查找:
```c
while (low <= high) {
```
4. 计算中间索引`mid`,并将目标值与数组中间元素比较:
```c
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
// 找到了目标值,返回其索引
return mid;
}
// 如果目标值大于中间元素,缩小搜索范围到右半部分
if (arr[mid] < target) {
low = mid + 1;
}
// 否则,缩小搜索范围到左半部分
else {
high = mid - 1;
}
}
```
5. 如果循环结束后仍未找到目标值,说明它不在数组中,返回-1或其他特定标记:
```c
if (low > high)
return -1; // 或者 "无此数";
```
完整的函数代码如下:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int target) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1; // 或者 "无此数";
}
// 示例使用
int main() {
int arr[] = {15, 13, 17, 9, 20, 8, 22, 6, 24, 11, 14, 16, 19, 21, 23};
int n = sizeof(arr) / sizeof(arr[0]);
int target;
printf("请输入一个数字:");
scanf("%d", &target);
int position = binarySearch(arr, n, target);
if (position != -1)
printf("%d 在数组中的位置是 %d\n", target, position + 1); // 注意数组索引从0开始
else
printf("无此数。\n");
return 0;
}
```
阅读全文