Trực quan hoá quá trình Tách (Divide) và Gộp (Conquer) trên Cây Đệ Quy
function mergeSort(arr, left, right) {
if (left >= right) return; // Base case (Lá)
let mid = Math.floor((left + right) / 2);
// CHIA ĐỂ TRỊ (Divide)
mergeSort(arr, left, mid); // Trái
mergeSort(arr, mid + 1, right); // Phải
// GỘP (Conquer/Merge)
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 phần còn lại...
for (let k = 0; k < temp.length; k++) {
arr[left + k] = temp[k]; // Ghi vào mảng cha
}
}