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

数组是double的一维数组。
数组大小是确定的。

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

void main()
{
double a[N];
int i,mid;
printf("请输入数据:");
for(i=0;i<N;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<i;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值,可以改变数组大小
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-15
#include<stdio.h>
#include<stdlib.h>
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<z)
{
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<n;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)时间内找到中位数

第2个回答  2020-01-11
楼主,这道题我的思路是先排序,然后输出排序后中间元素的值
一楼的思路也不错,可以参考
祝楼主进步~
程序如下:
#include
<stdio.h>
#include
<math.h>
#define
n
10
int
search(double
a[]);
void
main()
{
double
a[n];
int
i,mid;
printf("请输入数据:");
for(i=0;i<n;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<i;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值,可以改变数组大小
第3个回答  2019-08-02
楼主,这道题我的思路是先排序,然后输出排序后中间元素的值
一楼的思路也不错,可以参考
祝楼主进步~
程序如下:
#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值,可以改变数组大小
第4个回答  2009-04-28
先找大最大和最小的值,算出中间值应该是多少,然后找数组中最接近的数据就是了.
相似回答