C语言 重复元素折半查找

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);

}

首页