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

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

相关推荐
forest_099 小时前
多 Agent 协作第二课:交叉验证≠独立验证
人工智能·python·算法·机器学习·prompt·agi
纪念 22910 小时前
C++ 算法基础 (差分)
开发语言·c++·算法
jyOverQ13 小时前
从零学 JVM(六):垃圾回收算法详解——标记清除、标记复制与标记整理
jvm·算法
严肃小白兔15 小时前
第 06/24 期:神经网络的反向传播算法:从链式法则到梯度计算
人工智能·神经网络·算法
落羽的落羽15 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
【心态好不摆烂】16 小时前
数据结构基础精讲3
数据结构·算法
岑梓铭16 小时前
《考研408数据结构》第七章(B树 和 B+树)复习笔记
数据结构·笔记·b树·考研·408
漂流瓶jz17 小时前
UVA-1613 K度图的着色 题解答案代码 算法竞赛入门经典第二版
算法·深度优先·图论·贪心·aoapc·算法竞赛入门经典·uva
Pniubi18 小时前
动态规划入门 ( - 力扣509斐波那契数)
算法·动态规划