二分法求数组中比X小的元素个数

根据之前的关于三类二分法的探究 我们知道关于二分法们可以选择left < right -1来维护一个左右元素的性质使得我们能够使用二分对目标元素找到一个范围类似
a[left] < x a[right]>=x 如果我们想要实现这个目标,只需要在

while(left < right -1){
    middle = ( right + left )/2;
    if( a[middle]>= x ) right = middle;   
    else  left = middle;
    }  
    if(a[right] == x) return right;
    else return -1;

if(a[right]==x) return right\\因为包括前面的a[0]
else return right;
如果这个元素很小,那么在最后right = left+1 = 1 return rigth意味着比需要的位置多1个
如果这个元素很大,那么在最后left = right -1,也还是right = left +1的位置的位置上,return right 意味着比需要的位置少1个
所以不能简单地return left 或者right,需要两个判断

if(x<a[0])
    return 0;
if(x>a[right])
    return right+1; 

你可能感兴趣的:(二分法求数组中比X小的元素个数)