PTA 6-11 求自定类型元素序列的中位数--疑问求解答

博客内容涉及一个编程题目,要求实现一个函数,计算并返回自定义类型数组的中位数。给出的代码示例使用了冒泡排序的思路,但在某些测试用例下未能通过,尤其是偶数个元素的情况。博主已经测试了N=4和N=10的特殊情况,但仍有问题存在。

本题要求实现一个函数,求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 ){
    double min=A[0];
    double a[N];//另建一个数组存储经过排序后的元素
    int k=0;
    double max=100000000;
    int stop=(N+1)/2-1;
    for(int j=0;j<=stop;j++){
        for(int i=0;i<N;i++){ //循环:每次循环取最小值,然后将最小值的数组元素A[i]=max,min重置为max
        if(A[i]<=min){
            min=A[i];
            k=i;
            }
        }
        //printf("k=%d\n",k); 
        A[k]=max;
        a[j]=min;
        min=A[k];
    }
    return a[stop];
    //printf("%.2f\n",a[(N+1)/2-1]);
}

在这里插入图片描述

疑问:

他说我偶数个测试不通过,我测试了N=4,结果可以

还有超过10,中位数是第一个,我把中位数放在第一个,N=10,结果也可以。

希望大佬们能看看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值