本帖最后由 jhq999 于 2021-11-18 19:38 编辑 #include<stdio.h>
int midfind(int arry[],int findval,int ofst,int num);
int main()
{
int a[]={1,3,10,11,23,56,77,78,79},b=56;
int ret=midfind(a,b,0,sizeof(a)/4);
if(ret>-1) printf("%d",a[ret]);
else
printf("NULL");
return 0;
}
int midfind(int arry[],int findval,int ofst,int num)
{
if (0==num)
{
return -1;
}
if (arry[num/2]==findval)
{
return ofst+num/2;
}
else if(arry[num/2]>findval)
{
return midfind(arry,findval,ofst,num/2);
}
else
{
ofst+=num/2;
return midfind(arry+num/2,findval,ofst,num/2+num%2);
}
}
或者#include<stdio.h>
int midfind(int arry[],int findval,int num);
int main()
{
int a[]={1,3,10,11,23,56,77,78,79},b=6;
int ret=midfind(a,b,sizeof(a)/4);
if(ret>-1)printf("%d",a[ret]);
else
printf("NULL");
return 0;
}
int midfind(int arry[],int findval,int num)
{
int ofst=0;
while(1)
{
if (0==num)
{
return -1;
}
if (arry[num/2+ofst]==findval)
{
return ofst+num/2;
}
else if (arry[num/2+ofst]>findval)
{
num/=2;
}
else
{
ofst+=num/2;
num=num/2+num%2;
}
}
}
|