搜索
bottom↓
回复: 48

求助,5个浮点数,找出中间值,最快速的算法(已解决)

[复制链接]

出0入0汤圆

发表于 2014-10-11 10:20:37 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_Robin 于 2014-11-27 10:29 编辑

求助,5个浮点数,找出中间值,最快速的算法。
我现在的实现是,5个值里面搜索到最大值,设置为0,
然后再搜索一遍最大值,设置0,
然后再搜索一遍这个最大值,为中间值。
但是比较慢,请帮忙指点实现快速的方法。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-10-11 10:22:55 | 显示全部楼层
循环中同时搜索最大和最小,然后剔除,两次循环就可以实现

出0入0汤圆

发表于 2014-10-11 10:49:56 | 显示全部楼层
冒一下泡,叫冒泡算法。

出0入8汤圆

发表于 2014-10-11 11:02:29 来自手机 | 显示全部楼层
快排当然最快

出100入101汤圆

发表于 2014-10-11 11:16:42 | 显示全部楼层
5个数,哪种算法都差不多。

出0入0汤圆

发表于 2014-10-11 11:18:03 | 显示全部楼层
快速排序只是在数据量大的时候,性能才体现出来的;楼主才5个数,随便哪个算法都差不多的

出0入0汤圆

发表于 2014-10-11 12:26:06 | 显示全部楼层
5个值不管怎么弄时间差距都不大,求三次最大,第三次的那个值就是你要的。

出0入0汤圆

 楼主| 发表于 2014-10-11 12:33:36 | 显示全部楼层
ALUMEI 发表于 2014-10-11 11:18
快速排序只是在数据量大的时候,性能才体现出来的;楼主才5个数,随便哪个算法都差不多的 ...

因为这个功能,我需要反复调用多次,所以看看高人,有好的算法不,不知道通过汇编的方法,能不能实现

出0入0汤圆

发表于 2014-10-11 12:58:19 | 显示全部楼层
maimaige 发表于 2014-10-11 12:33
因为这个功能,我需要反复调用多次,所以看看高人,有好的算法不,不知道通过汇编的方法,能不能实现 ...

你在楼主位提到的算法,本身就是比较好的了,只求中间值,不需要排序;你的算法只需要循环4+3+2次;

出0入0汤圆

发表于 2014-10-11 13:16:18 | 显示全部楼层
只求中间值 不是排序  所以冒泡,快速排序等算法没必要  你用的已经算很快的了  如果要优化  可以把代码在汇编中看看有什么能优化的

出0入0汤圆

发表于 2014-10-11 13:20:48 | 显示全部楼层
不懂,学习学习。。。

出0入0汤圆

发表于 2014-10-11 15:52:35 | 显示全部楼层
经典的冒泡排序应该是最快的吧

出0入4汤圆

发表于 2014-10-11 15:57:45 | 显示全部楼层
本帖最后由 fulitun 于 2014-10-11 16:15 编辑

我看错了,看成最大值了。冒泡法吧

出0入0汤圆

发表于 2014-10-11 15:59:44 | 显示全部楼层
首先设置一个常年为零。。然后依次比较数据。。记录下当前最大的。。

出0入0汤圆

发表于 2014-10-11 16:00:11 | 显示全部楼层
Arthur244 发表于 2014-10-11 15:59
首先设置一个常年为零。。然后依次比较数据。。记录下当前最大的。。

常量不是常年。。打错了。。

出0入0汤圆

发表于 2014-10-11 16:05:05 | 显示全部楼层
立正!向右看齐!报数!1!2!3!4!5!
第三个就是中间值。

出0入0汤圆

发表于 2014-10-11 16:14:43 | 显示全部楼层
弄个宏内联函数不知道会提高一些不

出0入0汤圆

发表于 2014-10-11 16:18:51 | 显示全部楼层
冒泡法。

出5入0汤圆

发表于 2014-10-11 16:29:35 | 显示全部楼层
不知道是否考虑其中几个相等的情况,

出0入0汤圆

 楼主| 发表于 2014-10-11 16:32:35 | 显示全部楼层
starting 发表于 2014-10-11 16:14
弄个宏内联函数不知道会提高一些不

请问keil里面用内联函数怎么设置,我的keil4.5 用 forceinline 貌似不行

出5入0汤圆

发表于 2014-10-11 16:32:57 | 显示全部楼层
举个例子,所谓的中间值,具体要求是什么?或者楼主给出最原始需求
假设五个数: F1 = F2 = F3 ,F4= F5

出0入0汤圆

发表于 2014-10-11 16:35:21 | 显示全部楼层
上边说冒泡是最快的赶紧去看数据结构
楼主的算法时间复杂度应该是O(N^2)(两层循环),2楼的方法虽然循环次数少了,但是比较次数多了一次,其实也是O(N^2)的复杂度。如果采用排序的方法,排序快的肯定是最好的,比如快排O(NlogN)。不过数据量小的话,还真不一定,快排递归的开销也得考虑。所以,同样是O(N^2)没准2楼的方法快也不一定呢!所以楼主测试一下实际运行的时间就行了(比如5个数排序重复算1000次),选一个时间最短的。当然最好在板子上跑吧,,,
说的不对的地方,请指出~

出0入0汤圆

发表于 2014-10-11 16:49:11 | 显示全部楼层
先任意三数比较抛掉两头,取中间值与剩下两数比较抛掉两头

出0入0汤圆

发表于 2014-10-12 19:51:10 | 显示全部楼层
didadida 发表于 2014-10-11 16:35
上边说冒泡是最快的赶紧去看数据结构
楼主的算法时间复杂度应该是O(N^2)(两层循环),2楼的方法虽 ...

赞!学习了!

出0入0汤圆

发表于 2014-10-12 21:15:03 | 显示全部楼层
冒泡法,应该可以

出0入0汤圆

发表于 2014-10-12 21:48:19 | 显示全部楼层
小虾米不懂,学习下

出0入0汤圆

发表于 2014-10-13 00:21:10 | 显示全部楼层
把数据先放大100倍取整(应该是看你的小数点位数来做)
然后排序,再除100.00,还原数据。

出0入0汤圆

发表于 2014-10-13 06:10:08 来自手机 | 显示全部楼层
先排序,取中间的

出0入0汤圆

发表于 2014-10-13 09:09:33 | 显示全部楼层
LZ的方法 方向是对的, 但是设为0不妥吧, 除非都是正数, 万一有负的浮点呢

出0入0汤圆

发表于 2014-10-13 09:37:37 | 显示全部楼层
排序取中间就行了

出0入0汤圆

发表于 2014-10-13 09:47:01 | 显示全部楼层
5个数排序,时间复杂度还体现不出来,感觉倒是浮点比较上费时间。

出0入0汤圆

发表于 2014-10-13 10:17:50 | 显示全部楼层
这个冒泡法可以实现吧。

出0入0汤圆

发表于 2014-10-13 10:19:14 | 显示全部楼层
还是排序法思路比较清晰些

出0入0汤圆

 楼主| 发表于 2014-10-13 12:28:11 | 显示全部楼层
lianglee 发表于 2014-10-11 16:51
如果是在单片机上做的话,

在取得这组数据的时候,不要用浮点数。

请问,这个地方用无符号数的原因,如果用有符号数的话,会有什么问题?

出0入0汤圆

发表于 2014-10-13 13:33:42 | 显示全部楼层
冒泡排序应该是最快的吧

出0入0汤圆

发表于 2014-10-13 13:42:15 | 显示全部楼层
冒泡排序取中间~

出0入17汤圆

发表于 2014-10-13 13:54:57 | 显示全部楼层
帮顶了!!!

出0入26汤圆

发表于 2014-10-13 13:57:09 | 显示全部楼层
1、浮点转为整数
2、按大小排列,去掉两个最大,与两个最小,剩下的就是中间值

出0入0汤圆

发表于 2014-10-13 13:59:16 来自手机 | 显示全部楼层
tam2907 发表于 2014-10-11 16:49
先任意三数比较抛掉两头,取中间值与剩下两数比较抛掉两头

你这个方法是错误的

出0入0汤圆

发表于 2014-10-13 14:04:48 | 显示全部楼层
tam2907 发表于 2014-10-11 16:49
先任意三数比较抛掉两头,取中间值与剩下两数比较抛掉两头

你确定这样能得到正确的结果?

出0入0汤圆

发表于 2014-10-13 14:12:23 | 显示全部楼层
tam2907 发表于 2014-10-11 16:49
先任意三数比较抛掉两头,取中间值与剩下两数比较抛掉两头

假设 5个数就是 1 2 3 4 5
1 2 3 比较抛掉两头得 2
2 4 5 比较抛掉两头得 4

出0入0汤圆

发表于 2014-10-13 14:26:30 | 显示全部楼层
感觉楼主位的效率比较高了,

出0入0汤圆

发表于 2014-10-13 15:27:52 | 显示全部楼层
一般冒泡法就好了。c的课堂中这个应该是重头戏啊

出0入0汤圆

发表于 2014-11-30 20:13:57 | 显示全部楼层
数据少,可以针对你的平台。写不同的算法看下实际需要的指令周期数。
如果空间允许,再做成宏减少函数的调用次数

出0入0汤圆

发表于 2014-11-30 22:04:41 | 显示全部楼层
冒泡法取值中间,且对数据本身进行一定调整优化

出0入0汤圆

发表于 2014-12-2 16:24:15 | 显示全部楼层
要是数据差距大多较大, 取整数部分, 按楼主位方法搞. 遇到相等情况,再按浮点比较.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表