c语言,求一个数组中,中间值的大小怎么做?

数组是double的一维数组。数组大小是确定的。
2025-01-05 21:50:12
推荐回答(5个)
回答1:

楼主,这道题我的思路是先排序,然后输出排序后中间元素的值
一楼的思路也不错,可以参考
祝楼主进步~
程序如下:
#include
#include
#define N 10
int Search(double a[]);

void main()
{
double a[N];
int i,mid;
printf("请输入数据:");
for(i=0;i scanf("%lf",&a[i]);

mid=Search(a);
printf("中间值为:%.12f\n",a[mid]);
}

int Search(double a[])
{
int i,j,flag;
double tmp;
for(i=N-1;i>=0;i--)
{
flag=0;
for(j=0;j {
if(fabs(a[j])-fabs(a[j+1])>1e-10)
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag++;
}
}
if(flag==0) break;
}
if(N%2)
return N/2+1;
else
return N/2;
}
-------------------------
修改宏定义的N值,可以改变数组大小

回答2:

#include
#include
double*kuaisuxuanze(double*L,double*R,int k)
{
double t,*i,*j;
double z=R[-1];
if(R==L+1)return L;
for(i=j=L;i!=R;i++)
{
if(*i {
t=*i;
*i=*j;
*j++=t;
}
}
R[-1]=*j;
*j=z;
if(k<=j-L)return kuaisuxuanze(L,j,k);
else return kuaisuxuanze(j,R,k-(j-L));
}

double getmid(const double*p,int n)
{
double*t=(double*)malloc(sizeof(double)*n);
for(int i=0;i t[i]=p[i];
if(n&1)
return *kuaisuxuanze(t,t+n,(n>>1)+1);
else
return (*kuaisuxuanze(t,t+n,(n>>1)+1)+*kuaisuxuanze(t,t+n,(n>>1)))/2;
}
int main()
{
double a[9]={3,5,1,7,4,6,2,9,10};
printf("%lf",getmid(a,9));
}

利用快速选择算法在期望O(n)时间内找到中位数

回答3:

楼主,这道题我的思路是先排序,然后输出排序后中间元素的值
一楼的思路也不错,可以参考
祝楼主进步~
程序如下:
#include

#include

#define
n
10
int
search(double
a[]);
void
main()
{
double
a[n];
int
i,mid;
printf("请输入数据:");
for(i=0;iscanf("%lf",&a[i]);
mid=search(a);
printf("中间值为:%.12f\n",a[mid]);
}
int
search(double
a[])
{
int
i,j,flag;
double
tmp;
for(i=n-1;i>=0;i--)
{
flag=0;
for(j=0;j{
if(fabs(a[j])-fabs(a[j+1])>1e-10)
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag++;
}
}
if(flag==0)
break;
}
if(n%2)
return
n/2+1;
else
return
n/2;
}
-------------------------
修改宏定义的n值,可以改变数组大小

回答4:

楼主,这道题我的思路是先排序,然后输出排序后中间元素的值
一楼的思路也不错,可以参考
祝楼主进步~
程序如下:
#include
#include
#define
N
10
int
Search(double
a[]);
void
main()
{
double
a[N];
int
i,mid;
printf("请输入数据:");
for(i=0;i
=0;i--)
{
flag=0;
for(j=0;j
1e-10)
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag++;
}
}
if(flag==0)
break;
}
if(N%2)
return
N/2+1;
else
return
N/2;
}
-------------------------
修改宏定义的N值,可以改变数组大小

回答5:

先找大最大和最小的值,算出中间值应该是多少,然后找数组中最接近的数据就是了.