解法一:将寻找数组中的最大值和最小值看成是两个独立的问题。分别求出最大值和最小值即可。这样需要2*N次的比较才能求出最大的数和最小的数。
void FindMinMax(int A[],int size,int &min,int &max){ min=A[0]; max=A[0]; for(int i=1;imax) max=A[i]; if(A[i]
解法三:解法已经将比较次数降低到1.5N次,但是它已经破坏原来的数组。可以不需要调整数组元素的位置,直接用两个变量Max和Min来存储当前的最大值和最小值。同一组的两个数比较之后,不再调整顺序,而是用较小者与当前的Min比较,如果该数小于当前Min,则更新Min。Max同理。该算法的比较次数扔为1.5N.
void findMaxMin(int a[],int size,int &min,int &max){ for(int i=0;ia[i]) { if(a[i+1]>max) max=a[i+1]; if(a[i] max) max=a[i]; if(a[i+1]
扩展问题:如果需要找出N个数组中第二大数,需要比较多少次?
int FindSecondNum(int a[],int size){ int max=a[0]; int secondNum=0; for(int i=1;imax) { secondNum=max; max=a[i]; } else { if(secondNum