/* * 写一个函数找出一个整数数组中,第二大的数(microsoft) * 要求效率尽可能高 */ #include<stdio.h> #include<stdlib.h> int find(int *a,int n) { int i=1; int second=*(a+i); while(i<n) { if(*(a+i)>second)second=*(a+i); i++; } return second; } int findsecondmaxvalue(int *a,int n) { int i=0; int first=*(a+i); int second=*(a+i); while(i<n) { if(*(a+i)>first) { second=first; first=*(a+i); } else if(*(a+i)==first) { //do nothing } else if(*(a+i)<first&&*(a+i)>second) { second=*(a+i); } else { //do nothing } i++; } //最大值和次大值相等(只可能出现在数组的第一个元素) if(first==second) { second=find(a,n); } return second; } int main() { int a[]={9,5,1,7,4,6,2,3,8}; int n=sizeof(a)/sizeof(a[0]); int second=findsecondmaxvalue(a,n); printf("次大值=%d\n",second); }