實現從數組中找出最大的兩個數

從已知長度的數組pwIpd[low~high]找出最大的兩個數pwIpd[*x1]和pwIpd[*x2],要求儘可能減少比較次數,

#define   uint16_t    unsigned short
#define   swap(x,y)    {x=x+y;y=x-y;x=x-y;}

void max2(uint16_t *pwIpd,uint16_t low,uint16_t high,uint16_t *x1,uint16_t *x2)
{
    uint16_t index;

    if(pwIpd[*x1=low] < pwIpd[*x2=low+1])
        swap(*x1,*x2);
    for(index=low+1;index<=high;index++)
    {
        if(pwIpd[*x2] < pwIpd[index])
        {
            *x2 = index;
            if(pwIpd[*x2] > pwIpd[*x1])
                swap(*x1,*x2);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章