1
//動態數組版本1,T須支持operator < 運算
2
template<typename T>
3
void get_max_min(const T* p, size_t n, T& max, T& min)
4
{
5
assert(n);
6
7
T t_max, t_min, p_min, p_max;
8
p_min = p_max = p[0];
9
10
size_t i;
11
for(i = 1;i < n-1; i+=2)
12
{
13
if (p[i+1] < p[i])
14
t_max = p[i], t_min = p[i+1];
15
else
16
t_max = p[i+1],t_min = p[i];
17
18
if (p_max < t_max)
19
p_max = t_max;
20
21
if (t_min < p_min)
22
p_min = t_min;
23
}
24
if (i == n-1)
25
{
26
if (p_max < p[n-1])
27
p_max = p[n-1];
28
else if (p[n-1] < p_min)
29
p_min = p[n-1];
30
}
31
min = p_min;max = p_max;
32
}
33
34
//靜態數組版本2, T須支持operator < 運算
35
template<typename T,size_t N>
36
void get_max_min(const T (&p)[N],T& max, T& min)
37
{
38
get_max_min(p,N,max,min);
39
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39
