给定数组int arr[10] = {1, 2, 5, 10, 17, 26, 37, 50, 65, 82},读入用户输入的一个数,在数组中查找,然后输出对应的数的下标(从0开始),若没找到则返回-1。
我的程序查找出来没问题,就是查不出时候的条件不太对。没有返回值。是什么问题啊。
#include<stdio.h>
int fun(int a[],int m,int n,int p)
{
int mid;
mid=(m+n)/2;
if(a[mid]==p)
return mid;
else if(a[mid]<p)
{
return fun(a,mid+1,n,p);
}
else if(a[mid]>p)
{
m=m-m/2;
return fun(a,m,mid-1,p);
}
else if(((mid==m)&&a[m]!=p)||((mid+1)==n)&&a[n]!=p)
return -1;
}
void main()
{
int p;
int array[10]={1,2,5,10,17,26,37,50,65,82};
scanf("%d",&p);
printf("%d",fun(array,0,9,p));
}
C语言递归折半查找求数组中的数
答案:1 悬赏:80 手机版
解决时间 2021-12-28 23:23
- 提问者网友:最美的风景
- 2021-12-28 17:58
最佳答案
- 五星知识达人网友:不甚了了
- 2021-12-28 18:36
判断是否没找到条件不对,改一下:
#include<stdio.h>
int fun(int a[], int m, int n, int p)
{
int mid;
if (m > n)return -1;
mid = (m + n) / 2;
if (a[mid] == p)
return mid;
else if (a[mid]<p)
{
return fun(a, mid + 1, n, p);
}
else if (a[mid]>p)
{
//m = m - m / 2;
return fun(a, m, mid - 1, p);
}
//else if (((mid == m) && a[m] != p) || ((mid + 1) == n) && a[n] != p)
// return -1;
}
void main()
{
int p;
int array[10] = { 1, 2, 5, 10, 17, 26, 37, 50, 65, 82 };
scanf("%d", &p);
printf("%d", fun(array, 0, 9, p));
}
#include<stdio.h>
int fun(int a[], int m, int n, int p)
{
int mid;
if (m > n)return -1;
mid = (m + n) / 2;
if (a[mid] == p)
return mid;
else if (a[mid]<p)
{
return fun(a, mid + 1, n, p);
}
else if (a[mid]>p)
{
//m = m - m / 2;
return fun(a, m, mid - 1, p);
}
//else if (((mid == m) && a[m] != p) || ((mid + 1) == n) && a[n] != p)
// return -1;
}
void main()
{
int p;
int array[10] = { 1, 2, 5, 10, 17, 26, 37, 50, 65, 82 };
scanf("%d", &p);
printf("%d", fun(array, 0, 9, p));
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯