Divide and conquer is an algorithm for solving a problem by the following steps
Divide recursively the problem into non-overlapping subproblems until these become simple enough to be solved directly
Conquer the subproblems by solving them recursively. If they are small enough, solve them as base cases
Combine the solution to the subproblems into the solution for the original problem
Merge Sort Algorithm
Merge sort is an efficient sorting algorithm using the Divide and conquer algorithm
It divides the unsorted list into N sublists until each containing one element
Sort/Conquer the sublists by solving them as base cases, a list of one element is considered sorted
Repeatedly merge/combine sublists to produce new sorted sublists until there is only one sublist remaining. This will be the sorted list
Merge Sort implementation example in Java
import java.util.Arrays;
public class MergeSortTopDown {
public int[] sort(int[] arr) {
int n = arr.length;
if (n < 2) {
return arr;
}
// divide the array in half
int[] left = Arrays.copyOfRange(arr, 0, n/2);
int[] right = Arrays.copyOfRange(arr, n/2, n);
// sort/conquer each half
int[] sortedLeft = sort(left);
int[] sortedRight = sort(right);
// merge/combine the sorted halves
return merge(sortedLeft, sortedRight, n);
}
private int[] merge(int[] left, int[] right, int n) {
int[] result = new int[n];
int l = 0;
int r = 0;
for (int i = 0; i < n; i++) {
if (l < left.length && (r >= right.length || left[l] < right[r])) {
result[i] = left[l];
l++;
} else {
result[i] = right[r];
r++;
}
}
return result;
}
public static void main(String[] args) {
int[] a = {7, 9, 2, 3, 1};
a = new MergeSortTopDown().sort(a);
Arrays.stream(a).forEach(System.out::println);
}
}