二分查找算法的实现。假设数组a[0], a[1], … a[n-1]是单调递增的,并且没有重复的数值。要求在a数组中查找x,如果x存在,返回对应的下标;否则输出-1。
时间: 2024-09-27 18:14:29 浏览: 33
二分查找(Binary Search),也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是每次比较中间元素与目标值,然后根据比较结果决定是在数组的左半部分还是右半部分继续查找。以下是二分查找的步骤:
1. 初始化两个指针,`low`为数组的第一个索引,`high`为最后一个索引。
2. 计算中间索引 `mid` = (low + high) / 2。
3. 检查中间元素 `arr[mid]` 是否等于目标值 `x`:
- 如果相等,返回 `mid` 作为元素的位置。
- 如果 `arr[mid]` 小于 `x`,说明目标可能在右半部分,更新 `low` 为 `mid + 1`。
- 如果 `arr[mid]` 大于 `x`,说明目标可能在左半部分,更新 `high` 为 `mid - 1`。
4. 重复步骤2和3,直到找到目标值或者 `low` 大于 `high`。
5. 如果循环结束仍未找到,说明 `x` 不在数组中,返回 -1。
以下是一个简单的 C 语言实现:
```c
#include <stdio.h>
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;
// 如果目标小于中间元素,搜索左半部分
if (arr[mid] > x)
high = mid - 1;
// 否则,搜索右半部分
else
low = mid + 1;
}
// 目标不存在于数组中
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 5;
int result = binarySearch(arr, n, x);
if (result != -1)
printf("Element found at index %d\n", result);
else
printf("Element not found in the array.\n");
return 0;
}
```
运行这个程序,如果给定数组 `arr` 包含 5,那么它会在 `main` 函数里返回 2,表示位置 2 上找到了 5。
阅读全文