求自定类型元素序列的中位数(PAT)
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌈N/2⌉\lceil N/2 \rceil⌈N/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) {
ElementType temp;
for (int i = 0; i < N - 1; i++) {
for (int j = i + 1; j < N; j++) {
if (A[i] > A[j]) { temp = A[j]; A[j] = A[i]; A[i] = temp; }
}
}
if (N % 2) return A[(N + 1) / 2 - 1];
return (A[N / 2 - 1] + A[N / 2]) / 2;
}
这是一道PAT的题目,不知道问题出在哪里,提交上去后显示部分结果正确,求大神指导:
测试结果:
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 13/13 1 1
测试点2 答案错误 0/3 2 1
测试点3 答案正确 1/1 2 1
测试点4 答案正确 3/3 7 1
测试点5 答案错误 0/3 1 1
测试点6 运行超时 0/2 0 0