二分查找非递归c语言
时间: 2024-10-19 20:01:25 浏览: 33
C语言数据结构中二分查找递归非递归实现并分析
二分查找是一种非常高效的搜索算法,也称折半查找,适用于已排序数组。在非递归版本的C语言中,它通过不断比较中间元素与目标值来缩小搜索范围。以下是基本步骤:
1. **初始化**:设置两个指针,`low`指向数组的第一个元素,`high`指向最后一个元素。
2. **循环条件**:只要`low`小于等于`high`,继续循环。
3. **计算中间索引**:`mid = (low + high) / 2`,得到中间位置的索引。
4. **比较**:如果中间元素等于目标值,返回`mid`;如果目标值小于中间元素,将`high`设为`mid - 1`;如果目标值大于中间元素,将`low`设为`mid + 1`。
5. **重复步骤2到4**,直到找到目标值或者搜索范围为空。
以下是简单的非递归二分查找的C语言代码示例:
```c
#include <stdio.h>
int binarySearch(int arr[], int target, int low, int high) {
if (low > high)
return -1; // 如果范围空,表示未找到
int mid = low + (high - low) / 2;
// 检查中间元素
if (arr[mid] == target)
return mid;
else if (arr[mid] > target)
return binarySearch(arr, target, low, mid - 1); // 目标小,搜索左半部分
else
return binarySearch(arr, target, mid + 1, high); // 目标大,搜索右半部分
}
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);
(result != -1) ? printf("Element found at index %d\n", result) : printf("Element not found in the array\n");
return 0;
}
```
阅读全文