Visualizing the Divide and Conquer process on a Recursion Tree
function mergeSort(arr, left, right) {
if (left >= right) return; // Base case (Leaf)
let mid = Math.floor((left + right) / 2);
// DIVIDE AND CONQUER
mergeSort(arr, left, mid); // Left
mergeSort(arr, mid + 1, right); // Right
// MERGE (Conquer)
merge(arr, left, mid, right);
}
function merge(arr, left, mid, right) {
let temp = [], i = left, j = mid + 1;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) temp.push(arr[i++]);
else temp.push(arr[j++]);
}
// Copy remaining elements...
for (let k = 0; k < temp.length; k++) {
arr[left + k] = temp[k]; // Write to parent array
}
}