首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言】超详细的二分查找(折半查找)

【C语言】超详细的二分查找(折半查找)

作者头像
苏兮
发布2026-01-13 17:09:59
发布2026-01-13 17:09:59
1540
举报

一、二分查找介绍

  • 二分查找(Binary Search)是一种高效的查找算法,它要求被查找的数组必须是有序的(通常是升序)。
  • 其基本思想是:将查找区间不断缩小一半,通过比较中间元素与目标值的大小关系,确定目标值可能存在的区间,重复这个过程直到找到目标值或者确定目标值不存在。

二、代码实现及详解

代码语言:javascript
复制
#include <stdio.h>
// 二分查找函数
int binarySearch(int arr[], int left, int right, int target) {
    while (left <= right) 
    {
        // 计算中间元素的下标
        int mid = left + (right - left) / 2;

        // 如果中间元素等于目标值,返回其下标
        if (arr[mid] == target)
        {
            return mid;
        } 
        // 如果中间元素小于目标值,更新左边界
        else if (arr[mid] < target) 
        {
            left = mid + 1;
        } 
        // 如果中间元素大于目标值,更新右边界
        else 
        {
            right = mid - 1;
        }
    }
    // 未找到目标值,返回 -1
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
    int n = sizeof(arr) / sizeof(arr[0]);
    //sizeof(arr) - 计算的是数组的总大小,单位是字节
	//sizeof(arr[0]) - 计算的是数组元素的大小
    int target = 9;

    // 调用二分查找函数
    int result = binarySearch(arr, 0, n - 1, target);

    if (result != -1) 
    {
        printf("目标值 %d 在数组中的索引是 %d\n", target, result);
    } 
    els1e {
        printf("目标值 %d 不在数组中\n", target);
    }

    return 0;
}
  • binarySearch 函数解释:

该函数接受四个参数:一个整数数组 arr、左边界 left、右边界 right 和目标值 target。 使用 while 循环,只要左边界小于等于右边界,就继续查找。 计算中间元素的下标 mid,使用 left + (right - left) / 2 可以避免整数溢出。 比较中间元素与目标值的大小: 如果相等,返回中间元素的下标。 如果中间元素小于目标值,说明目标值可能在右半部分,更新左边界为 mid + 1。 如果中间元素大于目标值,说明目标值可能在左半部分,更新右边界为 mid - 1。 如果循环结束后仍未找到目标值,返回 -1。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、二分查找介绍
  • 二、代码实现及详解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档