用c写两个二分查找分别用循环和递归
时间: 2024-10-09 13:09:44 浏览: 14
当然可以,以下是使用C语言分别编写二分查找算法的循环版本和递归版本:
### 循环实现 (Binary Search - Iterative)
```c
#include <stdio.h>
// 定义数组和目标值
int arr[] = {1, 3, 5, 7, 9, 11, 13};
int target;
int len;
// 二分查找函数 (循环版)
int binary_search_iterative(int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid; // 找到目标返回索引
else if (arr[mid] < target)
low = mid + 1; // 目标大于中间元素,缩小左边界
else
high = mid - 1; // 目标小于中间元素,缩小右边界
}
return -1; // 如果没找到,返回-1
}
int main() {
target = 7;
len = sizeof(arr) / sizeof(arr[0]);
int result = binary_search_iterative(0, len - 1);
if (result != -1)
printf("Target found at index %d\n", result);
else
printf("Target not found in the array.\n");
return 0;
}
```
### 递归实现 (Binary Search - Recursive)
```c
#include <stdio.h>
// 递归二分查找函数
int binary_search_recursive(int arr[], int start, int end, int target) {
if (start > end)
return -1; // 列表为空或目标不在范围内,返回-1
int mid = start + (end - start) / 2;
if (arr[mid] == target)
return mid; // 找到目标返回索引
else if (arr[mid] < target)
return binary_search_recursive(arr, mid + 1, end, target); // 目标大于中间元素,递归右侧
else
return binary_search_recursive(arr, start, mid - 1, target); // 目标小于中间元素,递归左侧
}
int main() {
target = 7;
len = sizeof(arr) / sizeof(arr[0]);
int result = binary_search_recursive(arr, 0, len - 1, target);
if (result != -1)
printf("Target found at index %d\n", result);
else
printf("Target not found in the array.\n");
return 0;
}
```