C语言——二分法搜索数组中特定元素并返回下标

以下两种方法只提供了核心代码(伪代码):

二分法最重要的就是边界问题,处理好区间的边界。注意区分

一、左闭右闭法

int left=0;

int right=numsize-1;

while(left<=night)//注意这里是可以相等的,因为左闭右闭,左右边界是可以相等的。举个例子:[1,1]是存在的。

{

int middle=(left+right)/2;

if(nums[middle]>target){right=middle-1;}//这里要减1是因为要更新左区间的右边界,在接下来的搜索中需要去掉这个middle处的元素,因为这是右闭区间,middle处的这个元素已经比target目标值大了,在下次的更新中我们不能把middle这个边界放进来了,要去掉。

elseif(nums(middle)<target){left=middle+1;}//这里的道理和上面是一样的,更新右区间的左边界。

else

return middle;

}

二、左闭右开法

int left=0;

int right=numsize;

while(left<right)

{

int middle=(left+right)/2;

if(nums[middle]>target){right=middle;}//注意这里是middle不是加一了,因为右区间是开区间,区间内已经不包含middle索引对应的元素了,所以,不用进行加一更新。

else if(nums[middle]<target){left=middle+1;}//这里又加一了,区间的左边界是闭的,包含左边界,所以,这里需要加一进行更新。

else

return middle;

}

总结一下

区间都是闭得话,while判断得时候,left、right需要加等号。还有就是,左右边界在搜索时需要加1来进行更新,哪一个边界是闭,哪边边界就加1,开区间就不用加一。

切记,这两种方法不能混用在一起。

相关推荐
健忘的派大星36 分钟前
需求激增800%!2025年第一硬通货:懂大模型、云计算和硬件的“前沿部署工程师”!
人工智能·算法·架构·langchain·云计算·大模型学习·大模型教程
lntu_ling2 小时前
Python-基于Haversine公式计算两点距离
开发语言·python·gis算法
代码改善世界7 小时前
【数据结构与算法】栈和队列题解
数据结构
ShineWinsu7 小时前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
pp起床7 小时前
动态规划 | part05
算法·动态规划
小付同学呀7 小时前
C语言学习(五)——输入/输出
c语言·开发语言·学习
GuangHeAI_ATing7 小时前
国密算法SSD怎么选?这3款国产固态硬盘安全又高速
算法
梦幻精灵_cq8 小时前
学C之路:不可或缺的main()主函数框架(Learn-C 1st)
c语言·开发语言
雨泪丶8 小时前
代码随想录算法训练营-Day34
算法
消失的旧时光-19438 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发