Divide and Conquer
In Divide and Conquer method, we'll implement the following steps.
- Divide the array into two parts.
- Find the minimum and maximum of both the parts recursively.
- Take the minimum and maximum values of both the parts, compare them, and then find the minimum and maximum value of the entire array.
Next, we'll have a look at the Pseudocode:
Pseudocode
SNIPPET
1int[] findMinimumAndMaximum(int begin, int end,int input[])
2{
3 int maximum;
4 int minimum;
5 if ( begin == end )
6 {
7 minimum = input[begin]
8 maximum = input[begin]
9 }
10 else if ( begin + 1 == end )
11 {
12 if ( input[begin] < input[end] )
13 {
14 minimum = input[begin]
15 maximum = input[end]
16 }
17 else
18 {
19 minimum = input[end]
20 maximum = input[begin]
21 }
22 }
23 else
24 {
25 int midpoint = begin + (end - begin)/2
26 int leftArray[] = findMinimumAndMaximum(begin, midpoint, input)
27 int rightArray[] = findMinimumAndMaximum(midpoint+1, end, input)
28 if ( leftArray[0] > rightArray[0] )
29 maximum = leftArray[0]
30 else
31 maximum = rightArray[0]
32 if ( leftArray[1] < rightArray[1] )
33 minimum = leftArray[1]
34 else
35 minimum = rightArray[1]
36 }
37
38 int result[2] = {maximum, minimum}
39 return result
40}
Now let's head straight to the implementation in Python, JavaScript, and Java:
xxxxxxxxxx
46
document.write("Maximum value in an array is ", result.maximum);
function findMinimumAndMaximum(input , begin , end) {
result = new Array();
var result_left = new Array();
var result_right = new Array();
var midpoint;
if (begin == end) {
result.maximum = input[begin];
result.minimum = input[begin];
return result;
}
if (begin + 1 == end) {
if (input[begin] > input[end]) {
result.maximum = input[begin];
result.minimum = input[end];
} else {
result.maximum = input[end];
result.minimum = input[begin];
}
return result;
}
midpoint = parseInt(begin+(end-begin)/2);
result_left = findMinimumAndMaximum(input, begin , midpoint);
result_right = findMinimumAndMaximum(input, midpoint + 1, end);
if (result_left.minimum < result_right.minimum) {
result.minimum = result_left.minimum;
OUTPUT
:001 > Cmd/Ctrl-Enter to run, Cmd/Ctrl-/ to comment