问题:寻找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次比较的,思路与实现相关推荐

  1. c语言只需编译 不需连接,C语言程序设计-中国大学mooc

    C语言程序设计-中国大学mooc http://carrottt.blog.bokee.net    2020-6-9 转载自网课答案 (www.daanplus.com) : 完整答案请关注公众号[ ...

  2. 不可思议!英伟达新技术训练NeRF模型最快只需5秒,代码已开源

    英伟达将训练 NeRF 模型从 5 小时缩至 5 秒. 你曾想过在 5 秒内训练完成狐狸的 NeRF 模型吗?现在英伟达做到了! 令人不可思议的是,就如谷歌科学家 Jon Barron 在推特上表示的 ...

  3. 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 地平线主打AIoT的「旭日家族」,再添一员「猛将」. 今天,这家 AI 芯片独角兽在其「释放 · 芯效能」发布会中,推出了全新一代 AIoT ...

  4. 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少....

    积神经网络(CNN)的参数优化方法 from:http://blog.csdn.net/u010900574/article/details/51992156 著名: 本文是从 Michael Nie ...

  5. 只需十四步:从零开始掌握 Python 机器学习(附资源)

    分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...

  6. 算法,求1亿个数的中位数

    http://bbs.csdn.net/topics/310150772 可以借鉴一下以下方法的: 有1亿个浮点数,请找出其中最大的10000个.提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相 ...

  7. 这个只需一步就可做富集分析的网站还未发表就被CNS等引用超过350次

    Metascape 专门为生物学者设计的基因富集分析网站 一.Metascape简介 Metascape(http://metascape.org/) 是一个功能强大的基因功能注释分析工具,能帮助用户 ...

  8. c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!

    ★ 如何把C++的源代码改写成C代码? C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用 ...

  9. 华晨宏盛:只需建立正确的理财观,把握科学的理财办法

    <指数基金出资攻略>这是我的第一本理财入门书.带着对指数基金的猎奇,指数究竟是什么?咱们真的能够经过简略地追寻指数就打败大多数的出资者,取得超出出资商场的收益吗?这本书中关于指数基金的介绍 ...

最新文章

  1. 社区儿童计算机活动总结,社区亲子活动总结
  2. 深度学习(四)卷积神经网络Lenet-5实现
  3. 【渝粤教育】国家开放大学2018年春季 3780-22T燃气设备操作与维护 参考试题
  4. 05_SpringCloud整合声明式HTTP客户端-Feign
  5. msn邮箱在哪里登录?
  6. kindeditor在线HTML编辑器
  7. 2019秋 哈工大《概率论与数理统计》试题A及答案
  8. Javascript验证身份证号码:正则表达式
  9. Linux 修改系统时间为东八区时间
  10. Python+ASAquick+PSIPred蛋白质序列特征计算,ASAquick安装调用(Linux)
  11. ubuntu桌面被删除或home文件跑到桌面问题
  12. 2022-2027年中国皮肤病药物市场竞争态势及行业投资前景预测报告
  13. Android 实现人脸识别
  14. php artisan migrate,PHP artisan迁移不创建新表
  15. 如何让一幅图片逐渐变淡
  16. MATLAB数学建模 线性方程式与线性系统
  17. 阿里云SLB最佳实践
  18. 商业智能BI让数据分析不再困难,分解企业数据分析流程
  19. 对抗中的主动防御 —— HW及小规模网络对抗的战术
  20. 英语四级考前核心词汇【1】

热门文章

  1. 识别硬币和细胞数量+条形码检测(python+opencv)
  2. 知识图谱实战开发案例剖析(2)
  3. 用java代码实现 PDF转其他文件功能,请为每一行代码进行注释
  4. Decipher the internal structure of some webpage
  5. java中 继承、重写、抽象类、抽象方法、多态的学习
  6. “8858”手机公益短信
  7. dicom、raw、mhd 医学图像文件的解读
  8. 谷歌云服务器设置ssh账号,谷歌云设置ROOT用户以及允许使用第三方SSH工具登录教程...
  9. 微信免密支付php代码实现,微信刷卡支付接入模式及免密流程
  10. 创见ts服务器硬盘,#原创新人#使用Transcend 创见 TS960GJDM820 固态硬盘为 MacBook Pro 笔记本电脑 扩容...