-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminmax2.cpp
More file actions
83 lines (71 loc) · 1.59 KB
/
Copy pathminmax2.cpp
File metadata and controls
83 lines (71 loc) · 1.59 KB
1
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
using namespace std;
// structure is used to return
// two values from minMax()
struct Pair
{
int max;
int min;
};
struct Pair getMinMax(int arr[], int low, int high)
{
struct Pair minmax, mml, mmr;
int mid;
// there is only one element
if (low == high)
{
minmax.min = arr[low];
minmax.max = arr[low];
return minmax;
}
// there are two elements
if (high == low + 1)
{
if (arr[high] > arr[low])
{
minmax.min = arr[low];
minmax.max = arr[high];
}
else
{
minmax.min = arr[high];
minmax.max = arr[low];
}
}
// there are more than 2 element we divide the array
mid = (low + high) / 2;
mml = getMinMax(arr, low, mid);
mmr = getMinMax(arr, mid + 1, high);
// compare the minimums of both halves
if (mml.min < mmr.min)
{
minmax.min = mml.min;
}
else
{
minmax.min = mmr.min;
}
// compare the maximums of both halfs
if (mml.max > mmr.max)
{
minmax.max = mml.max;
}
else
{
minmax.max = mmr.max;
}
return minmax;
}
// Driver code
int main()
{
int arr[] = {1000, 11, 445,
1, 330, 3000};
int arr_size = sizeof(arr) / sizeof(arr[0]);
struct Pair minmax = getMinMax(arr, 0, arr_size - 1);
cout << "Minimum element is "
<< minmax.min << endl;
cout << "Maximum element is "
<< minmax.max;
return 0;
}