嵌入式学习-02_数据结构和算法 (二分查找)

嵌入式学习-02_数据结构和算法 (二分查找)

1.1二分查找

1.1.1 算法原理

二分查找(Binary Search)是一种高效的搜索算法,通常用于有序数据集中查找目标元素。其原理是通过将数据集划分为两半并与目标进行比较,以确定目标在哪一半中,从而逐步缩小搜索范围,直到找到目标元素或确定不存在。基本原理如下:

(1)选择中间元素: 在有序数据集中,选择数组的中间元素。

(2)比较目标: 将中间元素与目标元素进行比较。

(3)查找成功: 如果中间元素等于目标元素,则查找成功,返回中间元素的索引。

(4)缩小搜索范围: 对于一个升序的数据集,如果中间元素大于目标元素,说明目标可能在左半部分;如果中间元素小于目标元素,说明目标可能在右半部分。根据比较结果,将搜索范围缩小到一半,继续查找。

(5)重复步骤: 重复上述步骤,不断将搜索范围缩小,直到找到目标元素或搜索范围为空。

1.1.1 代码实现

#include <stdio.h>
/***********************************************************
 * 二分查找
 ***********************************************************/

/**
 * @brief 查找元素所在的位置
 * @param int *arr      数组
 * @param int len       数组长度
 * @param int target    要查找的元素
 * @return int 元素的位置,如果没有找到返回-1
 */
int binarySearch(int *arr, int len, int target)
{
    //计算首尾元素下标
    int start = 0;
    int end = len - 1;
    //启动循环
    while (start <= end)
    {
        //计算中间元素下标(首元素下标 + 尾元素下标)
        int mid = (start + end) / 2;

        //目标元素与中间元素相等
        if (target == arr[mid])
        {
            return mid;
        }
        //目标元素比中间元素小
        else if (target < arr[mid] )
        {
            end = mid - 1;
        }
        //目标元素比中间元素大
        else if (target > arr[mid])
        {
            start = mid + 1;
        }

    }
    return -1;
}

int main()
{
    int nums[] = {1, 3, 4, 6, 7, 8, 9};

    printf("4的位置为:%d", binarySearch(nums,7,4));
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路x飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值