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

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

相关推荐
weixin_307779131 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json
柳安忆1 小时前
【论文阅读】Sparks of Science
算法
web安全工具库1 小时前
从课堂笔记到实践:深入理解Linux C函数库的奥秘
java·数据库·算法
周杰伦_Jay2 小时前
【Java集合体系】全面解析:架构、原理与实战选型
java·开发语言·数据结构·链表·架构
爱编程的鱼3 小时前
C# 变量详解:从基础概念到高级应用
java·算法·c#
tkevinjd3 小时前
反转链表及其应用(力扣2130)
数据结构·leetcode·链表
HalvmånEver3 小时前
红黑树实现与原理剖析(上篇):核心规则与插入平衡逻辑
数据结构·c++·学习·算法·红黑树
哆啦刘小洋4 小时前
T:堆的基本介绍
算法
AresXue4 小时前
你是否也在寻找二进制和字符串的高效转换算法?
算法
Swift社区4 小时前
从 0 到 1 构建一个完整的 AGUI 前端项目的流程在 ESP32 上运行
前端·算法·职场和发展