非递归的二分查找c语言
时间: 2024-10-16 10:01:01 浏览: 24
非递归的二分查找,也称为迭代二分查找,是一种在有序数组中寻找特定元素的算法。它通过不断地将搜索范围减半来提高效率,避免了递归带来的栈空间消耗。以下是基本步骤:
1. 初始化两个指针,`low`指向数组的起始位置,`high`指向数组的结束位置。
2. 计算中间索引 `mid = (low + high) / 2`。
3. 检查中间元素是否就是要找的目标值:
- 如果中间值等于目标值,直接返回中间索引。
- 如果中间值大于目标值,说明目标在左半部分,将 `high` 设为 `mid - 1`,继续搜索左半部分。
- 如果中间值小于目标值,说明目标在右半部分,将 `low` 设为 `mid + 1`,继续搜索右半部分。
4. 当 `low` 大于 `high` 时,表示未找到目标值,返回 -1 表示元素不存在。
下面是简单的非递归二分查找的C语言实现:
```c
#include <stdio.h>
int binarySearch(int arr[], int target, int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] > target)
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 target = 5;
int result = binarySearch(arr, target, 0, n - 1);
if (result != -1)
printf("Element found at index %d\n", result);
else
printf("Element not found in the array.\n");
return 0;
}
```
阅读全文