📅  最后修改于: 2023-12-03 14:49:02.217000             🧑  作者: Mango
二进制搜索(Binary Search)是一种在有序数组中查找目标元素的算法。该算法通过比较目标值与数组的中间元素来决定目标值在左半部分还是右半部分,并逐步缩小搜索范围,直到找到目标元素或搜索范围为空。
以下是使用递归方式实现二进制搜索的C程序示例:
#include <stdio.h>
int binarySearchRecursive(int arr[], int target, int left, int right) {
if (right >= left) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] > target)
return binarySearchRecursive(arr, target, left, mid - 1);
return binarySearchRecursive(arr, target, mid + 1, right);
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 6;
int result = binarySearchRecursive(arr, target, 0, size - 1);
if (result == -1)
printf("目标元素未找到\n");
else
printf("目标元素在数组中的索引为: %d\n", result);
return 0;
}
此递归实现使用 binarySearchRecursive
函数进行二进制搜索。它接受一个有序数组 arr
、目标元素 target
、搜索范围的左边界 left
和右边界 right
作为参数,并根据中间元素的值将搜索范围缩小。如果找到目标元素,则返回其索引;否则,返回 -1。
以下是使用迭代方式实现二进制搜索的C程序示例:
#include <stdio.h>
int binarySearchIterative(int arr[], int target, int left, int right) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 6;
int result = binarySearchIterative(arr, target, 0, size - 1);
if (result == -1)
printf("目标元素未找到\n");
else
printf("目标元素在数组中的索引为: %d\n", result);
return 0;
}
此迭代实现使用 binarySearchIterative
函数进行二进制搜索。它接受一个有序数组 arr
、目标元素 target
、搜索范围的左边界 left
和右边界 right
作为参数,并通过不断更新左右边界来缩小搜索范围。如果找到目标元素,则返回其索引;否则,返回 -1。
以上是二进制搜索的C程序示例,你可以根据需要选择递归或迭代的实现方式。这个算法在处理有序数组时非常高效,可以在时间复杂度为 O(log n) 的情况下找到目标元素。