C语言代码:
//查找一个数字w,若有序表中只有一个w;
int bsearch(int *A,int x,int y,int v)
{
int m;
while(x<y)
{
m=x+(y-x)/2;
if(A[m]==v)
return m;
else if(A[m]>v)
y=m;
else
x=m+1;
}
return -1;
}
//若有序表中有多个w,求w所在的区间;
int lower__bound(int *A,int x,int y,int v) //下界;
{
int m;
while(x<y)
{
m=x+(y-x)/2;
if(A[m]>=v)
y=m;
else
x=m+1;
}
return x;
}
int upper__bound(int *A,int x,int y,int v) //上界;
{
int m;
while(x<y)
{
m=x+(y-x)/2;
if(A[m]<=v)
x=m+1;
else
y=m;
}
return x;
}
C++ STL 代码:
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int a[]={0,1,2,2,3};
sort(a,a+5,cmp);
printf("%d\n",lower_bound(a,a+5,2,cmp)-a);
printf("%d\n",upper_bound(a,a+5,2,cmp)-a);
return 0 ;
}
具体思想在小白书145页;