|  | 
 
 发表于 2021-11-18 18:22:05
|
显示全部楼层 
| 本帖最后由 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;
                }
        }
        
}
 | 
 |