从已知长度的数组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);
}
}
}