本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3
12.3 34 -5
输出样例:
12.30
//我的代码
ElementType Median( ElementType A[], int N ){
double min=A[0];
double a[N];//另建一个数组存储经过排序后的元素
int k=0;
double max=100000000;
int stop=(N+1)/2-1;
for(int j=0;j<=stop;j++){
for(int i=0;i<N;i++){ //循环:每次循环取最小值,然后将最小值的数组元素A[i]=max,min重置为max
if(A[i]<=min){
min=A[i];
k=i;
}
}
//printf("k=%d\n",k);
A[k]=max;
a[j]=min;
min=A[k];
}
return a[stop];
//printf("%.2f\n",a[(N+1)/2-1]);
}

疑问:
他说我偶数个测试不通过,我测试了N=4,结果可以
还有超过10,中位数是第一个,我把中位数放在第一个,N=10,结果也可以。
希望大佬们能看看!
博客内容涉及一个编程题目,要求实现一个函数,计算并返回自定义类型数组的中位数。给出的代码示例使用了冒泡排序的思路,但在某些测试用例下未能通过,尤其是偶数个元素的情况。博主已经测试了N=4和N=10的特殊情况,但仍有问题存在。
1400

被折叠的 条评论
为什么被折叠?



