求一串无序数列的中位数

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[1000006];
int main()
{
    ll n;
    scanf("%lld",&n);
    for(ll i=0;i<n;i++)
        scanf("%lld",&a[i]);
    if(n%2==1)
    {
        nth_element(a,a+n/2,a+n);//  n/2表示数列中第n/2+1个大的数
        printf("%lld\n",a[n/2]);
    }
    else
    {
        nth_element(a,a+n/2,a+n);
        ll p=a[n/2];
        nth_element(a,a+n/2-1,a+n);
        ll q=a[n/2-1];
        double ans=(p+q)/2.0;
        ll zhi;
        if(ans<0)
        {
            double cnt=fabs(ans);
            ll x=floor(cnt);
            if(double(x)==cnt) zhi=-x;
            else zhi=-(x+1);
        }
        else zhi=floor(ans);
        printf("%lld\n",zhi);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/haohaoxuexilmy/article/details/83044648