zoukankan      html  css  js  c++  java
  • 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];
    }
  • 相关阅读:
    公司某台电脑连接服务器共享文件失败(Windows找不到"\192.168.1.3)
    隐式转换题目;
    video设置autoplay 不起作用
    面试时遇到的题目。正则,replace()
    优化以及bug
    简单的异步函数async/await例子
    i==1 && resolve()
    命名
    通过ES6 Module看import和require区别
    从 0 到 1 合理高效使用 GitHub 的资料
  • 原文地址:https://www.cnblogs.com/andywenzhi/p/5731304.html
Copyright © 2011-2022 走看看