O(n)求中位数

#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;
}
ElementType Median( ElementType A[], int N )
{
    int left = 0,right = N-1;
    while(1)
    {
        int l = left,r = right,pos;
        ElementType tmp = A[l];
        while(l<r)
        {
            while(l<r&&A[r]>tmp)
                r--;
            A[l] = A[r];
            while(l<r&&A[l]<=tmp)
                l++;
            A[r] = A[l];
        }
        A[l] = tmp;
        pos = l;
        if(pos==N/2)
            return A[pos];
        else if(pos>N/2)
        {
            right = pos-1;
        }
        else
            left = pos+1;
    }
}
全部评论

相关推荐

头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务