【C语言练习】049. 实现二分查找算法

049. 实现二分查找算法

二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中查找特定元素。它的基本思想是通过不断将数组分成两部分,逐步缩小查找范围,从而快速定位目标元素。二分查找的时间复杂度为 O(logn),效率远高于线性查找。
用C语言实现二分查找的代码,包括递归和非递归两种方式。

二分查找的特点

  1. 效率高: 时间复杂度为 O(logn),适合在大规模数据中查找。
  2. 适用条件:数组必须是有序的。
  3. 空间复杂度:递归实现的空间复杂度为 O(logn),因为递归调用会占用系统栈空间。非递归实现的空间复杂度为 O(1),因为只使用了少量额外变量。

二分查找是查找算法中的经典方法,适用于有序数组的快速查找。

1. 递归实现二分查找

递归实现二分查找的核心是通过递归调用逐步缩小查找范围。

#include <stdio.h>

// 递归实现二分查找
int binarySearchRecursive(int arr[], int left, int right, int target) {
   
    if (left > right) {
   
        return -1; // 未找到目标值
    }

    int mid = left + (right - left) / 2; // 防止溢出

    if (arr[mid] == target) {
   
        return mid; // 找到目标值,返回索引
    } else if (arr[mid] > target) {
   
        return binarySearchRecursive(arr, left, mid - 1, target); // 在左半部分查找
    } else {
   
        return binarySearchRecursive(arr, mid + 1, right, target); // 在右半部分查找
    }
}

int main() {
   
    int arr[] = {
   2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target;

    printf("请输入要查找的数字:");
    scanf("%d"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值