unsigned char a,b,c;
求着三个数中的中间值。
求一个最快的算法。

解决方案 »

  1.   

    求一个计算速度比较快的。偏算法。
    我先给一个比较弱的方法,大家看看你的方法是不是比这个还要快。
    if((a>=b&&a<=c)||(a<=b&&a>=c))return a
    else if((b>=a&&b<=c)||(b<=a&&b>=c))return b
    else return c
      

  2.   


    #define MIDDLE(a, b, c) max(min((a), (b)), min(max((a), (b)), (c)))
      

  3.   

    奇怪了,照理说Eleven的方法比我的要好,可是我用图像矩阵中的数据做测试运行30遍,发现一个用了781ms,Eleven的方法用了1015ms
      

  4.   

    你的方法快的,分支不需要都要计算,#define MIDDLE(a, b, c) max(min((a), (b)), min(max((a), (b)), (c)))代码简洁,但几乎都参与运算了。
      

  5.   

    csdn上的潜龙卧虎门,利用中午休息时间来show一下你们的智慧才智吧。
      

  6.   

    这个应该更快,因为比较过的两个数不重复再比较了.
    int a=1,b=2,c=3;
    if(a>=b)
    {
    if(b>=c)return b;
    else if(a>=c) return c;
    else return a;
    }
    else
    {
    if(a>=c)return a;
    else if(b>=c)return c;
    else return b;
    }
      

  7.   

    std::vector<unsigned char>  myvector(3);
    myvector.at(0)= a;
    myvector.at(1)= b;
    myvector.at(2)= c;
    sort(myvector.begin(), myvector.end());
    myvector.at(1)就是中间值
      

  8.   

    你们都弱爆了!!先求个最大值,再求个最小值(四次if())就搞定了,最后a+b+c-max-min就是了