二分查找法

博客介绍了二分查找法,它是基础算法,能使搜索复杂度变为O(logn)。每次写二分查找常需调试边界条件,作者为有统一写法写下此文,还提到在函数开始让left - 1、right + 1扩大范围可省略最后单独判断环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

二分查找法是一种十分基础的算法,他可以使得搜索的复杂度变为O(logn),每次写二分查找,都免不了调试边界条件,故写下此文,以后写二分查找好有统一写法。

代码

//left是最左侧可达到的序号
//right是最左侧可达到的序号
int binarySearch(int a[],int key,int left,int right){
    while(left + 1 < right){
    	int mid = (left + right) / 2;
    	if (a[mid] == key)
        	return mid;
        if (a[mid] < key)
            left = mid;
        else
            right = mid;
    }
    //这样写无法查找到最左侧和最右侧的元素
    //因此要单独判断 
    if(a[left] == key)
	 	return left;
    if(a[right] == key)
	 	return right;
    return -1;
}
如果在函数一开始,让left - 1,right + 1,把范围扩大一下,就可以省略最后的单独判断的环节。
最终代码:
//left是最左侧可达到的序号
//right是最左侧可达到的序号
int binarySearch(int a[], int key, int left, int right){
	left--;
	right++;
    while(left + 1 < right){
    	int mid = (left + right) / 2;
    	if(a[mid] == key)
        	return mid;
        if(a[mid] < key)
            left = mid;
        else
            right = mid;
    }
    return -1;
}

转载于:https://www.cnblogs.com/woxiaosade/p/10828843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值