寻找5个数的中位数,只需6次比较的,思路与实现
问题:寻找5个数的中位数,5个数中可能有相同的数,假设数依次存放在a[0] a[1] a[2] a[3] a[4]中,为了简便记为a0,a1,a2,a3,a4
思路:定义compare_swap(int* a,int* b)方法,此方法比较a,b两个数的大小,如果a大于b则交换两个数,也就是将两个数的较小者存放在a中,将较大者存放在b中。按照如下顺序进行比较:
比较a0 a1,将较小者存入a0
比较a2 a3,将较小者存入a2
比较a0 a2,将较小者存入a0,如果a0和a2发生了交换,则同时交换a1,a3,目的是使a0,a1和a2,a3仍保持原来的大小关系。进行这三次比较后,a0比a1,a2,a3都小,不可能是中位数,故排除a0,(5个数的中位数不可能比三个数都小)
比较a1 a4,将较小者存入a1
比较a1 a2,将较小者存入a1,如果a1和a2发生了交换,则同时交换a3,a4,使a1 a4和a2 a3的大小关系保持不变。进行这三次比较后,a1比a2,a3,a4都小,可以排除a1。
比较a2 a4,将较小者存入a2。这个时候a2就是中位数。
代码实现如下:
#include<stdio.h>void compare_swap(int *a,int *b){//比较和交换方法if(*a>*b){int temp = *a;*a = *b;*b = temp;}
}void swap(int *a,int *b){int temp = *a;*a = *b;*b = temp;
}//寻找5个数的中位数,6次比较的方法
int find_median_in_five(int a[]){int temp;compare_swap(&a[0],&a[1]);compare_swap(&a[2],&a[3]);temp = a[0];compare_swap(&a[0],&a[2]); //排除a[0]if(temp != a[0])swap(&a[1],&a[3]);compare_swap(&a[1],&a[4]);temp = a[1];compare_swap(&a[1],&a[2]); //排除a[1]if(temp != a[1])swap(&a[3],&a[4]);compare_swap(&a[2],&a[4]);return a[2];
}void main(){int a[] = {4,11,1,72,11};printf("%d\n",find_median_in_five(a));
}
寻找5个数的中位数,只需6次比较的,思路与实现相关推荐
- c语言只需编译 不需连接,C语言程序设计-中国大学mooc
C语言程序设计-中国大学mooc http://carrottt.blog.bokee.net 2020-6-9 转载自网课答案 (www.daanplus.com) : 完整答案请关注公众号[ ...
- 不可思议!英伟达新技术训练NeRF模型最快只需5秒,代码已开源
英伟达将训练 NeRF 模型从 5 小时缩至 5 秒. 你曾想过在 5 秒内训练完成狐狸的 NeRF 模型吗?现在英伟达做到了! 令人不可思议的是,就如谷歌科学家 Jon Barron 在推特上表示的 ...
- 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布
金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 地平线主打AIoT的「旭日家族」,再添一员「猛将」. 今天,这家 AI 芯片独角兽在其「释放 · 芯效能」发布会中,推出了全新一代 AIoT ...
- 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少....
积神经网络(CNN)的参数优化方法 from:http://blog.csdn.net/u010900574/article/details/51992156 著名: 本文是从 Michael Nie ...
- 只需十四步:从零开始掌握 Python 机器学习(附资源)
分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...
- 算法,求1亿个数的中位数
http://bbs.csdn.net/topics/310150772 可以借鉴一下以下方法的: 有1亿个浮点数,请找出其中最大的10000个.提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相 ...
- 这个只需一步就可做富集分析的网站还未发表就被CNS等引用超过350次
Metascape 专门为生物学者设计的基因富集分析网站 一.Metascape简介 Metascape(http://metascape.org/) 是一个功能强大的基因功能注释分析工具,能帮助用户 ...
- c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!
★ 如何把C++的源代码改写成C代码? C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用 ...
- 华晨宏盛:只需建立正确的理财观,把握科学的理财办法
<指数基金出资攻略>这是我的第一本理财入门书.带着对指数基金的猎奇,指数究竟是什么?咱们真的能够经过简略地追寻指数就打败大多数的出资者,取得超出出资商场的收益吗?这本书中关于指数基金的介绍 ...
最新文章
- 社区儿童计算机活动总结,社区亲子活动总结
- 深度学习(四)卷积神经网络Lenet-5实现
- 【渝粤教育】国家开放大学2018年春季 3780-22T燃气设备操作与维护 参考试题
- 05_SpringCloud整合声明式HTTP客户端-Feign
- msn邮箱在哪里登录?
- kindeditor在线HTML编辑器
- 2019秋 哈工大《概率论与数理统计》试题A及答案
- Javascript验证身份证号码:正则表达式
- Linux 修改系统时间为东八区时间
- Python+ASAquick+PSIPred蛋白质序列特征计算,ASAquick安装调用(Linux)
- ubuntu桌面被删除或home文件跑到桌面问题
- 2022-2027年中国皮肤病药物市场竞争态势及行业投资前景预测报告
- Android 实现人脸识别
- php artisan migrate,PHP artisan迁移不创建新表
- 如何让一幅图片逐渐变淡
- MATLAB数学建模 线性方程式与线性系统
- 阿里云SLB最佳实践
- 商业智能BI让数据分析不再困难,分解企业数据分析流程
- 对抗中的主动防御 —— HW及小规模网络对抗的战术
- 英语四级考前核心词汇【1】
热门文章
- 识别硬币和细胞数量+条形码检测(python+opencv)
- 知识图谱实战开发案例剖析(2)
- 用java代码实现 PDF转其他文件功能,请为每一行代码进行注释
- Decipher the internal structure of some webpage
- java中 继承、重写、抽象类、抽象方法、多态的学习
- “8858”手机公益短信
- dicom、raw、mhd 医学图像文件的解读
- 谷歌云服务器设置ssh账号,谷歌云设置ROOT用户以及允许使用第三方SSH工具登录教程...
- 微信免密支付php代码实现,微信刷卡支付接入模式及免密流程
- 创见ts服务器硬盘,#原创新人#使用Transcend 创见 TS960GJDM820 固态硬盘为 MacBook Pro 笔记本电脑 扩容...