|
发表于 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;
- }
- }
-
- }
复制代码 |
|