1 //递归实现求任意次最值 2 //求数组元素中第N大的元素 3 4 5 /*优化版本*/ 6 int getMax(int *p, int len,int num)//在当前所有项中得到比num小的最大数 7 { int max = 1<<31;//int能表示的最小负数 8 int i; 9 for(i = 0;i < len;i++) 10 { 11 if( p[i]< num) 12 { 13 if(max < p[i]) 14 max = p[i]; 15 } 16 } 17 return max; 18 } 19 20 int func(int* p,int len,int n)//返回数组元素中第n大的元素 21 { 22 int nvalue; 23 if(n == 1) 24 { 25 nvalue = getMax(p,len,~(1<<31)); 26 } 27 else 28 { 29 nvalue = getMax(p,len,func(p,len,n-1)); 30 } 31 return nvalue; 32 } 33 34 35 36 /*基础版本*/ 37 int func2(int* p,int len,int n)//返回数组元素中第n大的元素 38 { 39 int i; 40 int max = 1<<31;//int能表示的最小负数 41 42 if(n == 1) 43 { 44 int num = ~(1<<31); 45 for(i = 0;i < len;i++) 46 { 47 if(max < p[i]) 48 max = p[i]; 49 } 50 } 51 else 52 { 53 for(i = 0;i < len;i++) 54 { 55 if( p[i]< func(p,len,n-1)) 56 { 57 if(max < p[i]) 58 max = p[i]; 59 } 60 } 61 } 62 return max; 63 } 64 65 #include <stdio.h> 66 int main(void) 67 { 68 int arr[] = {10,1,8,28,11,20,9}; 69 printf("%d ",func(arr,sizeof(arr)/sizeof(int),5));//打印第n大的元素 70 return 0; 71 }