普通二分查找:
【left,right】时
while(left<=right)
也可以while(left<right),此写法类似【left,right)
全闭时的分区分别为
[l,mid-1], mid ,[mid+1,right]
更新范围的操作:
target<mid:
将全部范围缩小至左区间的取值,使在[l,mid-1],即right=mid-1,
else if(target>mid):
将全部范围缩小至右区间的取值,使在[mid+1,right],即left=mid+1
else
正好mid是目标的下标,输出即可
【left,right)时
因为left=right没有定义,所以while中不可以等于,只能
while(left<right)
左闭右开时的分区分别为
[l,mid), mid ,[mid+1,right)
右开,则[l,mid) mid [mid+1,right) 正好遍布坐标线的每一点
想搞清楚范围,就自己画出区间图
更新范围的操作:
target<mid:
将全部范围缩小至左区间的取值,使在[l,mid),即right=mid,
else if(target>mid):
将全部范围缩小至右区间的取值,使在[mid+1,right),即left=mid+1
else
正好mid是目标的下标,输出即可