6.用递归实现求数组中的任意次最值。

 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 }
原文地址:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9464979.html