MAX_MIN

代码太烂:不简洁 

 1 #pragma once
 2 /*
 3 事实上,我们只需要最多3 Ln/2」次比较就可以同时找到最小值和最大值。具体的方法是记
 4 录已知的最小值和最大值。但我们并不是将每一个输入元素与当前的最小值和最大值进行比
 5 团丑较这样做的代价是每个元素需要2次比较,而是对输入元素成对地进行处理。首先,我们将
 6 一对输入元素相互进行比较,然后把较小的与当前最小值比较,把较大的与当前最大值进行比
 7 较。这样,对每两个元素共需3 次比较。
 8 如何设定已知的最小值和最大值的初始值依赖千n是奇数还是偶数。如果n是奇数,我们就
 9 将最小值和最大值的初值都设为第一个元素的值,然后成对地处理余下的元素。如果n是偶数,
10 就对前两个元素做一次比较,以决定最小值和最大值的初值,然后与n是奇数的情形一样,成对
11 地处理余下的元素。
12 */
13 #include<vector>
14 #include<utility> //pair
15 
16 std::pair<int,int>
17 max_min(const std::vector<int>& A)
18 {
19     //奇数
20     if (A.size() & 1)
21     {
22         int max= A[0], min = A[0];
23         for (int i = 1; i != A.size() - 1;++i)
24         {
25             if (A[i] < A[i + 1])
26             {
27                 if (A[i] < min)
28                     min = A[i];
29                 if (max < A[i + 1])
30                     max = A[i + 1];
31             }
32             else
33             {
34                 if (A[i + 1] < min)
35                     min = A[i + 1];
36                 if (max < A[i])
37                     max = A[i];
38             }
39         }
40         return { min,max };
41     }
42     //偶数
43     else
44     {
45         int min = A[0],max = A[1];
46         if (A[1] < A[0])
47             min = A[1], max = A[0];
48         for (int i = 2; i != A.size() - 1;++i)
49         {
50             if (A[i] < A[i + 1])
51             {
52                 if (A[i] < min)
53                     min = A[i];
54                 if (max < A[i + 1])
55                     max = A[i + 1];
56             }
57             else
58             {
59                 if (A[i + 1] < min)
60                     min = A[i + 1];
61                 if (max < A[i])
62                     max = A[i];
63             }
64         }
65         return { min,max };
66     }
67 }
原文地址:https://www.cnblogs.com/Z-s-c11/p/13870656.html