非递归折半查找C语言代码
时间: 2024-06-30 21:01:00 浏览: 142
非递归折半查找
非递归折半查找(Binary Search),也称为分治法查找,是一种在有序数组中查找特定元素的搜索算法。这种方法不是通过反复比较当前元素和中间元素来查找,而是将数组分成两部分,每次比较后确定目标在哪一部分,然后继续在那一部分进行一半的查找。以下是使用C语言实现非递归折半查找的一个示例:
```c
#include <stdio.h>
// 非递归折半查找函数
int binarySearch(int arr[], int low, int high, int target) {
if (high >= low) {
int mid = low + (high - low) / 2;
// 如果中间元素正好是我们要找的
if (arr[mid] == target)
return mid;
// 如果中间元素大于目标,则在左半部分查找
else if (arr[mid] > target)
return binarySearch(arr, low, mid - 1, target);
// 否则,在右半部分查找
else
return binarySearch(arr, mid + 1, high, target);
}
// 如果目标不在数组内,返回-1
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 9;
int result = binarySearch(arr, 0, n - 1, target);
if (result != -1)
printf("元素 %d 在数组中的索引为 %d\n", target, result);
else
printf("元素 %d 未在数组中找到\n", target);
return 0;
}
```
在这个例子中,`binarySearch`函数接收一个已排序的整数数组、起始索引`low`、结束索引`high`以及目标值`target`。如果找到了目标,返回对应的索引;如果没有找到,返回-1。
阅读全文