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
先找大最大和最小的值,算出中间值应该是多少,然后找数组中最接近的数据就是了.

C语言 数组内数字比较大小
1、首先打开CodeBlocks。2、创建一个新项目。项目语言,选择“c”。3、我们将项目名称命名为“MaxNum”,然后下一步,“finish”。4、打开 “main.c”文件。5、用数组将10个数存入其中即可。开始,创建一个整型(int)有10个空间的数组nums。然后,定义一个循环变量i。6、在for循环中,用来接收用户...

怎样在c语言中比较一个数组中元素的大小?
假设整型数组 a,10个元素,\\x0d\\x0a 比较代码:\\x0d\\x0a int max = a[0]; \/\/ max保存最大元素\\x0d\\x0a int _max = 0; \/\/保存最大元素下标,如果需要记录那个元素最大\\x0d\\x0a for(int i=1; imax ) \/\/比较元素大小,记录最大元素及其下标\\x0d\\x0a {\\x0d\\x0a max...

c语言中比较一个数组中元素的大小
int _max = 0; \/\/保存最大元素下标,如果需要记录那个元素最大 for(int i=1; i<10; i++) \/\/ 10为数组元素数量 { if( a[i]>max ) \/\/比较元素大小,记录最大元素及其下标 { max = a[i];_max = i;} } 最后 a[_max] 就是最大元素,值同时也保存在变量max里。

c语言中比较一个数组中元素的大小
include <Strsafe.h> include <string.h> int _tmain(int argc, _TCHAR* argv[]){ int large(int x,int y);int a[10],b[10],i,n=0,m=0,k=0;printf("输入数组a:");for (i=0;i<10;i++){ scanf_s("%d",&a[i]);} printf("\\n");printf("输入数组b:");for(i=0;i...

c语言 调用函数求一个数组的中位数
printf("排序后数组:\\n");for(i=0;i<N;i++)printf("%d ",a[i]);printf("\\n");if(N%2==1)\/\/求中位数 middle=a[N\/2];else middle=(a[N\/2]+a[N\/2-1])\/2.0;return middle;} void main(){ int a[N],i;float middle;printf("请输入%d个数:\\n",N);for(i=0;i<...

...要求计算中间数(数值大小处于中间的数)并输出。
printf("中间数为:%d\\n", middleNumber);return 0;} 这个程序首先要求用户输入奇数个整数的个数。然后,程序创建一个大小为 n 的整数数组来存储用户输入的整数。接下来,程序使用插入排序对输入的整数进行排序。插入排序是一种简单的排序算法,它从第一个元素开始,将每个元素插入到已排序部分的适当...

C语言 查找一个一维数组中最大值和最小值的位置,并交换最大值和最
1、打开visual studio,创建一个控制台应用程序,在Main方法中,定义一个整型数组,用于演示数组的最大值、最小值,以及交换他们的位置。2、在Main方法中,定义四个变量,用于暂存最大、最小值,以及他们的序号。3、通过for循环,找出数组中,最大的值和序号、最小的值和序号,存入上面定义的四个变量...

怎样在c语言中比较一个数组中元素的大小?
int a,b, text, hello;for(a=0; a<10-1; a=a+1) { \/\/在这里进行比较的开始的代码 hello = 1; \/\/假如剩下的元素已经被排序好了,然后接着进行下面的比较 for(b=0; b<10-1-i; b=b+1){ if(numbers[b] > numbers[b+1]){ text= numbers[b];numbers[b] = numbers[b...

用C语言取中间值
把各个数放在数组中,然后进行排序(升序、降序均可),根据下标就可取得中间值。int a[] = {2,5,7,8,12,16,78,88};int n = sizeof(a)\/sizeof(a[0]);int mid = a[n\/2]; \/\/ 这就是中间值

C语言输入三个数求中间的哪个数怎样写代码?
1.可以先排序后抽出中间那个2.ifif(a>=b&&a<=c||a<=b&&a>=c)则aif(b>=a&&b<=c||b<=a&&b>=c)则cif(c>=a&&c<=b||c<=a&&c>=b)则b只输入三个数的话很简单,只需要对三个数排序一下,起泡就可以。如果输入的数很多的话,比如求100W个数据第1W大的是哪个可以用二叉堆,...

相似回答