有15个数按由大到小的顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”
时间: 2024-10-21 22:03:45 浏览: 89
折半查找法(也叫二分查找),是一种高效的搜索算法,它适用于已经排序的数组。在给定的有序数组中,每次取中间元素与目标值比较,如果目标值大于中间值,就在中间值右边的部分继续查找;如果目标值小于中间值,就在左边的部分查找;如果相等则返回当前索引。
对于这个问题,我们可以按照以下步骤实现折半查找法:
1. 初始化两个指针 `low` 和 `high`,分别指向数组的第一个元素和最后一个元素。
2. 当 `low` 小于等于 `high` 时,执行循环:
a. 计算中间索引 `mid`:`mid = (low + high) / 2`。
b. 检查中间元素的值:
- 如果中间值等于目标值,返回 `mid`,表示找到目标位置。
- 如果中间值大于目标值,说明目标在左半部分,更新 `high = mid - 1`。
- 否则,目标在右半部分,更新 `low = mid + 1`。
3. 如果循环结束时没有找到目标值,说明目标不存在,输出“无此数”。
下面是一个简单的示例代码(假设数组名为 `arr`):
```c
int binarySearch(int arr[], int n, int x) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] > x)
high = mid - 1;
else
low = mid + 1;
}
return -1; // 数组中未找到x,返回-1表示“无此数”
}
```
阅读全文