【MAC 上学习 C++】Day 62-1. 6-11 求自定类

2019-10-26  本文已影响0人  RaRasa

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];
}
上一篇下一篇

猜你喜欢

热点阅读