二分查找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:这种方式计算中值可以防止 l 和 r 相加时溢出。
  4. 比较与分支:

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

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

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

相关推荐
hetao17338371 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6262 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan2 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356383 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah3 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO93 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician3 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.4 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o4 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者5 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express