C语言 重复元素折半查找
想了半天没想出好的方式,给了一段丑陋的代码,仅供参考:
intbsearch(inta[],intlen,intsearchnum)
{
intlow=0;
inthight=len-1;
intmid=0;
while(low<hight)
{
mid=(low+hight)/2;
if(searchnum>a[mid])
{
low=mid+1;
}
elseif(searchnum<a[mid])
{
hight=mid-1;
}
else
{
returnmid;
}
}
return-1;
}
voidspecailbsearch(inta[],intlen,intsearchnum,intpos[])
{
inti=0;
intj=0;
if((pos[j++]=bsearch(a,len,searchnum))!=-1)
{
i=pos[0];
while(a[++i]==searchnum)
{
pos[j++]=i;
}
i=pos[0];
while(a[--i]==searchnum)
{
pos[j++]=i;
}
}
}
voidtestbsearch()
{
inta[]={2,3,6,6,6,6,6,8};
intb[8]={0};
intlen=sizeof(a)/sizeof(int);
bsearch(a,len,4);
specailbsearch(a,len,6,b);
}