C语言二分查找
本帖最后由 VaeSummerTime 于 2021-11-18 12:59 编辑编写函数midfind:功能为用二分查找法在n个数中查找指定数字的位置。
在任意6个升序排列的数中查找指定数字的位置。
具体效果如图,用函数的方法,麻烦写一下可以吗 本帖最后由 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);
else
printf("NULL");
return 0;
}
int midfind(int arry[],int findval,int ofst,int num)
{
if (0==num)
{
return -1;
}
if (arry==findval)
{
return ofst+num/2;
}
else if(arry>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);
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==findval)
{
return ofst+num/2;
}
else if (arry>findval)
{
num/=2;
}
else
{
ofst+=num/2;
num=num/2+num%2;
}
}
} {:10_249:}跟着学习一下{:10_254:}{:10_254:} {:5_95:} jhq999 发表于 2021-11-18 18:22
或者
这都不合题意呐,具体效果如图 jhq999 发表于 2021-11-18 18:22
或者
还是谢谢您的回复,我去重新想一想 VaeSummerTime 发表于 2021-11-18 22:55
还是谢谢您的回复,我去重新想一想
#include <stdio.h>
int midfind(int array[], size_t begin, size_t end, int value) {
if(begin + 1 == end) {
return array == value ? begin : -1;
}
int res;
size_t mid = (begin + end) / 2;
res = midfind(array, begin, mid, value);
return res == -1 ? midfind(array, mid, end, value) : res;
}
int main(void) {
/*
int array[] = {1, 6, 8, 12, 18, 22, 43};
int pos = midfind(array, 0, 7, 13);
printf("%d\n", pos);
*/
printf("请输入按升序排列的6个数字:");
int array;
for(size_t i = 0; i < 6; ++i) scanf("%d", &array);
printf("请输入要查找的数字:");
int value; scanf("%d", &value);
int pos = midfind(array, 0, 6, value);
if(pos != -1) printf("找到了,%d在%d的位置\n", value, pos);
else printf("没有找到%d\n", value);
return 0;
}
{:10_254:} {:10_254:} {:10_254:}
页:
[1]