求自定类型元素序列的中位数
2016-03-20 16:52
387 查看
/*
求自定类型元素序列的中位数
其中给定集合元素存放在数组
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; while(scanf("%d", &N) != EOF) { for ( i=0; i<N; i++ ) scanf("%f", &A[i]); printf("%.2f\n", Median(A, N)); } return 0; } void HeapAdjust(ElementType array[], int i, int nlength) { int nChild; ElementType nTemp; for (; 2 * i + 1 < nlength; i = nChild) { nChild = 2 * i + 1; //得到子节点中较大的节点 if (nChild < nlength - 1 && array[nChild + 1] > array[nChild]) nChild++; //如果较大的子节点大于父节点那么把较大的子节点往上移动,替换它的父节点 if (array[i] < array[nChild]) { nTemp = array[i]; array[i] = array[nChild]; array[nChild] = nTemp; } else break; } } void Heapsort(ElementType array[], int length) { int i;//调整序列的前半部分元素,调整完之后第一个元素是序列的最大元素 ElementType temp; for (i = length / 2 - 1; i >= 0; i--) HeapAdjust(array, i, length); //从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素 for (i = length - 1; i >= 0; i--) { //把第一个元素和当前的最后一个元素交换 //保证当前的最后一个位置的元素都是现在这个序列中最大的 temp = array[0]; array[0] = array[i]; array[i] = temp; //不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值 HeapAdjust(array, 0, i); } } ElementType Median(ElementType A[], int N) { Heapsort(A, N); return A[N / 2]; }
相关文章推荐
- 20145233韩昊辰 第(三)周总结
- 理解socket的阻塞
- (一)MongoDB简介
- SQL Server 未删除任何行
- NSAttributedString 的21种属性 详解
- ID3算法
- maven的Generating Project in Batch mode 卡住问题
- LightOJ 1341 - Aladdin and the Flying Carpet
- STL复杂算法
- Unity脚本事件执行的顺序
- 《模仿游戏》(The Imitation Game)观看感受
- iOS应用架构谈 开篇
- SQL Server下载地址(亲测绝对有效)
- poj1256 tolower函数
- PCA主成分分析法入门
- 获取到body的offsetTop和offsetLeft值
- js slideToggle 的另一种实现方式,根据不同的状态添加选中颜色
- #leetcode#258 Add Digits
- iOS 数据存储的常用方式
- Git学习笔记(5)