6-11 求自定类型元素序列的中位数 (25 分)
1. 题目摘自
https://pintia.cn/problem-sets/14/problems/743
2. 题目内容
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊N/2+1⌋大的元素。其中集合元素的类型为自定义的ElementType。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。
输入样例:
3
12.3 34 -5
输出样例:
12.30
3. 源码参考
#include <iostream>
#include <iomanip>
using namespace std;
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
cin >> N;
for ( i=0; i<N; i++ )
{
cin >> A[i];
}
cout << fixed << setprecision(2) << Median(A, N) << endl;
return 0;
}
ElementType Median(ElementType A[], int n)
{
int i, j, k;
ElementType t;
k = n / 2;
while(k >= 1)
{
for(i = k; i < n; i++)
{
j = i - k;
while((A[j + k] < A[j]) && (j >= 0))
{
t = A[j];
A[j] = A[j + k];
A[j + k]= t;
j -= k;
if(j < 0)
break;
}
}
k /= 2;
}
return A[n / 2];
}
网友评论