打印

6楼的想**很慢的哦

[复制链接]
1881|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2008-12-4 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ljm810010| | 2008-12-4 22:29 | 只看该作者

数据位长?C or ASM ? CPU type?

使用特权

评论回复
板凳
xhtxzxw| | 2008-12-4 23:22 | 只看该作者

嘿嘿

unsigned int Middle(unsigned int x, y, z)
{
    return (x>=y)? ((y>=z)? y:((x>=z)? z:x))  :  ((x>=z)? x:((y>=z)? z:y));
}

//最多做三次比较操作,就可以了.看不清楚的话,看下面展开的格式.
unsigned int Middle(unsigned int x, y, z)
{
    if(x >= y)
    {
        if(y >= z)  return(y);
        else
        {        
            if(x >= z) return(z);
            else       return(x);
        }
    }
    else
    {
        if(x >= z)  return(x);
        else        
        {
            if(y >= z) return(z);
            else       return(y);
        }
    }
}


使用特权

评论回复
地板
ejack| | 2008-12-5 07:53 | 只看该作者

3楼的确是放之四海而皆准的代码,换句话说,没有任何实际

使用特权

评论回复
5
ljm810010| | 2008-12-5 09:53 | 只看该作者

是我目前见到最快的代码,同时也是最慢的代码^_^

使用特权

评论回复
6
ayb_ice|  楼主 | 2008-12-5 21:15 | 只看该作者

感谢各位支持

今天自己写了个代码,和xhtxzxw差不多,只是形式有点不同,我不大喜欢嵌套类型的程序,我把它展成了顺序执行,基本形式如下
char a;
char x,y,z;

a = 0;
if(x>y) a|=1;
if(x>z) a|=2;
if(y>z) a|=4;
switch(a){
// 此处根据a值取值....
}

使用特权

评论回复
7
耕在此行| | 2008-12-5 21:37 | 只看该作者

我的思路

像类似楼主这样的一般计N个值 再对N个值排序.
取中间N-2个值再求均值.

使用特权

评论回复
8
xhtxzxw| | 2008-12-5 21:48 | 只看该作者

嘿嘿

//是字节量啊? 还是用这个吧? 快不快,看反汇编就是.包括RET,一共用31条汇编指令.请4楼,5楼给出更好的.
#define uchar unsigned char
uchar Middle(uchar x, uchar y, uchar z)
{
    return (x>=y)? ((y>=z)? y:((x>=z)? z:x))  :  ((x>=z)? x:((y>=z)? z:y));
}

使用特权

评论回复
9
ayb_ice|  楼主 | 2008-12-5 22:03 | 只看该作者

不是字节变量

这里只是思路,字节变量就是没有什么效率的问题了,我必须在采样下一次数据前搞定这些,否则就没有什么意义,所以想看一下是否有很高效的算法,其实这就也是个冒泡算法,只是数量是3个,冒泡效率反而变低...

使用特权

评论回复
10
ljm810010| | 2008-12-5 22:36 | 只看该作者

6楼似乎是越搞越复杂了

使用特权

评论回复
11
xwj| | 2008-12-5 22:48 | 只看该作者

6楼的想**很慢的哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15461

帖子

34

粉丝