4-11 求自定类型元素序列的中位数
2016-08-03 01:04
411 查看
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第
大的元素。其中集合元素的类型为自定义的ElementType。
函数接口定义:
其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。
裁判测试程序样例:
输入样例:
输出样例:
解题思路:
一开始选了
测试点有问题。偶数和奇数的中位数输出应该是不一样的。
反馈给姥姥后,姥姥已经更改了题目描述。
解题代码:
大的元素。其中集合元素的类型为自定义的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
解题思路:
一开始选了
冒泡排序,最后一个数据点超时。换成
选择排序,最后一个数据点依然超时。
选择排序在排序的过程中已经形成了部分最终序列,而且在
i == N/2时选择结束,这样依然超时。最后使用 qsort 才没超时。注意 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]; }
相关文章推荐
- 路由表及其建立算法
- 非负大整数加法---网易校招附加题
- HDU 4597 Play Game (DP 记忆话搜索)
- 对list集合中的对象进行排序(转载)
- Swift与OC的对比
- 数据结构
- javascript将DOM事件处理程序封装为event.js 出现的低级错误记录
- Struts 2中的constant详解
- platform驱动学习
- 消息认证技术
- Servlet-三种实现方式
- 预定义变量基本概念
- Powershell用于加密解密方法
- scala基础38-foldLeft/foldRight/sortWith
- Httpclient简单分析
- myeclipse自定义模板
- 什么是回调函数?回调函数的简单实现。
- SQLAlchmy模块详解
- 王道数据结构课后习题 | P37
- 我的2016年中小结