二分查找c语言实现

二分查找是一种在有序数组中查找特定元素的有效算法。其基本思想是将目标值与数组中间元素进行比较,通过比较结果缩小搜索范围,逐步接近目标值。以下是一个用C语言实现的二分查找算法示例:

c 复制代码
#include <stdio.h>

// 二分查找函数
int binarySearch(int arr[], int l, int r, int x) {
    while (l <= r) {
        int m = l + (r - l) / 2;  // 计算中间索引,这种写法可以防止溢出

        // 检查x是否正好是中间元素
        if (arr[m] == x) {
            return m;
        }

        // 如果x大于中间元素,则只在右半部分查找
        if (arr[m] < x) {
            l = m + 1;
        }
        // 否则在左半部分查找
        else {
            r = m - 1;
        }
    }

    // 如果执行到这里,说明没有找到
    return -1;
}

int main() {
    int arr[] = {2, 3, 4, 10, 40};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 10;
    int result = binarySearch(arr, 0, n - 1, x);

    if (result == -1) {
        printf("元素不在数组中\n");
    } else {
        printf("元素位于索引 %d\n", result);
    }

    return 0;
}

代码解析

  1. 函数定义

    • int binarySearch(int arr[], int l, int r, int x):接收一个数组 arr,搜索范围的左端点 l 和右端点 r,以及要查找的元素 x
  2. 循环条件

    • while (l <= r):只要左端点不超过右端点,就继续搜索。
  3. 中间索引的计算

    • int m = l + (r - l) / 2:这种方式计算中值可以防止 lr 相加时溢出。
  4. 比较与分支

    • 如果中间元素正好等于目标值,则返回中间索引。
    • 如果目标值大于中间元素,则更新左端点 l,继续在右半部分搜索。
    • 如果目标值小于中间元素,则更新右端点 r,继续在左半部分搜索。
  5. 结果处理

    • 如果循环结束还没有找到,则返回 -1 表示元素不在数组中。

这种二分查找算法仅适用于已排序的数组。如果数组未排序,则必须先进行排序,或使用其他搜索技术。

相关推荐
2501_914245934 小时前
C语言设计模式详解:从理论到实践的完整指南
c语言·开发语言·设计模式
Jerry5 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发6 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星7 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮7 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
2501_914245937 小时前
C语言与硬件交互:从GPIO到中断的嵌入式编程实践
c语言·单片机·交互
dream_home84077 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>7 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
炸膛坦客8 小时前
单片机/C/C++八股:(二十四)编译文件( .bin 和 .hex ,包括 .elf 和 .axf )
c语言·c++·单片机
To_OC8 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode