• 4-11 求自定类型元素序列的中位数


    本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第大的元素。其中集合元素的类型为自定义的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
    ", Median(A, N));
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    3
    12.3 34 -5
    

    输出样例:

    12.30
    

    解题思路:
    一开始选了冒泡排序,最后一个数据点超时。换成选择排序,最后一个数据点依然超时。选择排序在排序的过程中已经形成了部分最终序列,而且在 i == N/2 时选择结束,这样依然超时。最后使用 qsort 才没超时。注意 qsort 的使用方法。

    wiki 上的 qsort

    测试点有问题。偶数和奇数的中位数输出应该是不一样的。
    反馈给姥姥后,姥姥已经更改了题目描述。

    解题代码:

    #include<stdlib.h>
    
    int compare (const void *p, const void *q) {
    	int x = *(const int *)p;
    	int y = *(const int *)q;
    	if (x < y) {
    		return -1;
    	} else if (x > y) {
    		return 1;
    	}
    	return 0;
    }
    	
    ElementType Median ( ElementType A[], int N ) {
    
    	qsort(A, N, sizeof(ElementType), compare);
    	
    	return A[N/2];
    }
  • 相关阅读:
    C#编程总结(三)线程同步 多线程
    配置 Spring.NET
    C# Redis
    WPF MvvmLight RelayCommand 绑定Command 的使用
    WCF编程系列(一)初识WCF
    C#/WPF程序开机自动启动
    C# 创建Windows Service(Windows服务)程序
    前端Js框架汇总
    列式存储和行式存储
    llvm-3.4.2 编译失败 解决方案
  • 原文地址:https://www.cnblogs.com/andywenzhi/p/5731304.html
Copyright © 2020-2023  润新知