| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
求自定类型元素序列的中位数 (25分) 
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的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 
 
 
ElementType Median( ElementType A[], int N ) 
{ 
        int min,i,j; 
        float t,k; 
        for(i=0;i<N-1;i++) 
        { 
                min = i; 
                for(j=i+1;j<N;j++)if(A[min]>A[j])min = j; 
                t = A[i]; 
                A[i] = A[min]; 
                A[min] = t; 
        } 
        return A[N/2]; 
}//为什么我的总有大N,卡时         
运行超时这一分得不到 
 本帖最后由 jackz007 于 2021-1-6 17:43 编辑 
- ElementType Median( ElementType A[] , int N)
 
 - {
 
 -         ElementType r = 0.0 , t                          ;
 
 -         int i , j                                        ;
 
 -         for(i = 0 ; i < N - 1 ; i ++) {
 
 -                 for(j = i + 1 ; j < N ; j ++) {
 
 -                         if(A[i] > A[j]) {
 
 -                                 t = A[i]                 ;
 
 -                                 A[i] = A[j]              ;
 
 -                                 A[j] = t                 ;
 
 -                         }
 
 -                 }
 
 -         }
 
 -         if(N) {
 
 -                 if(N % 2) r = A[N / 2]                   ;
 
 -                 else r = (A[N / 2 - 1] + A[N / 2]) / 2.0 ;
 
 -         }
 
 -         return r                                         ;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |