二分查找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 表示元素不在数组中。

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

相关推荐
顶点多余7 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源8 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
罗西的思考8 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60169 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘10 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
Brilliantwxx12 小时前
【C语言】 初入嵌入式C语言复习(基础+进阶面试题)
c语言·开发语言
wuminyu12 小时前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
维克兜率天12 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
rhythm-ring12 小时前
宏定义续行符 \ 的使用与踩坑
c语言·c++
AI情绪识别开源13 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang