1 #include <stdio.h>
2 /*
3 * 任意十个数,打印出它们中的最大数、最小数
4 *
5 * 测试数据:① 1,-12,20,30,-5,-23,33,125,200,-100
6 ② 0,10,3,1,5,6,-10,90,9,-4
7 ③ 12,13,14,15,10,-10,-11,-12,-9,9
8 思路:用分治法的思想做
9 * */
10 #define ARRY_SIZE 10
11
12 void GetMaxAndMin(int *pArr, int l, int r, int *pMax, int *pMin);
13
14 int main()
15 {
16 // 定义数组
17 //int iArr[ARRY_SIZE] = {12,13,14,15,10,-10,-11,-12,-9,9};
18 //int iArr[ARRY_SIZE] = {0,10,3,1,5,6,-10,90,9,-4};
19 int iArr[ARRY_SIZE] = {1,-12,20,30,-5,-23,33,125,200,-100};
20 int iMax, iMin;
21 GetMaxAndMin(iArr, 0, ARRY_SIZE - 1, &iMax, &iMin);
22 printf("The max value is %d\nThe min vlaue is %d\n", iMax, iMin);
23 return 0;
24 }
25
26 void GetMaxAndMin(int *pArr, int l, int r, int *pMax, int *pMin)
27 {
28 if (l == r)
29 {
30 *pMax = pArr[l];
31 *pMin = pArr[1];
32 return;
33 }
34 else if(l + 1 == r)
35 {
36 if (pArr[l] >= pArr[r])
37 {
38 *pMax = pArr[l];
39 *pMin = pArr[r];
40
41 }
42 else
43 {
44 *pMax = pArr[r];
45 *pMin = pArr[l];
46 }//else
47 return;
48 }
49 int iMiddle = (l + r) / 2; // 求中点
50 int lMax;
51 int lMin;
52 GetMaxAndMin(pArr, l, iMiddle, &lMax, &lMin);
53 int rMax;
54 int rMin;
55 GetMaxAndMin(pArr, iMiddle, r, &rMax, &rMin);
56 *pMax = lMax > rMax ? lMax : rMax;
57 *pMin = lMin > rMin ? rMin : lMin;
58
59
60 }