您的位置:首页 > 其它

4-11 求自定类型元素序列的中位数

2016-08-03 01:04 411 查看
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第

大的元素。其中集合元素的类型为自定义的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


解题思路:

一开始选了
冒泡排序
,最后一个数据点超时。换成
选择排序
,最后一个数据点依然超时。
选择排序
在排序的过程中已经形成了部分最终序列,而且在
i == N/2
时选择结束,这样依然超时。最后使用 qsort 才没超时。注意 qsort 的使用方法。



测试点有问题。偶数和奇数的中位数输出应该是不一样的。

反馈给姥姥后,姥姥已经更改了题目描述。


解题代码:

#include<stdlib.h>

int compare (const void *p, const void *q) {
int x = *(const int *)p;
int y = *(const int *)q;
if (x < y) {
return -1;
} else if (x > y) {
return 1;
}
return 0;
}

ElementType Median ( ElementType A[], int N ) {

qsort(A, N, sizeof(ElementType), compare);

return A[N/2];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: