优化后的求最大和最小值的代码如下:
int *minMax(int *A,int n){
int min,max,i;
if(n&0x01){
min=max=A[0],i=1;
}else{
if(A[0]<A[1])
min=A[0],max=A[1];
else
min=A[1],max=A[0];
i=2;
}
for(;i<n-1;i+=2){
if(A[i]<A[i+1]){
if(A[i]<min)
min=A[i];
if(A[i+1]>max)
max=A[i+1];
}else{
if(A[i+1]<min)
min=A[i+1];
if(A[i]>max)
max=A[i];
}
}
int r[]={min,max};
return r;
}
算法最多比较3n/2次.