function MergeSortCaller() {
let array = [7, 2, 9, 3]
const auxiliaryArray = array.slice();
partition (array, 0, array.length - 1, auxiliaryArray);
}
function partition(
mainArray,
startIdx,
endIdx,
auxiliaryArray,
) {
if (startIdx === endIdx) return;
const middleIdx = Math.floor((startIdx + endIdx) / 2);
partition (auxiliaryArray, startIdx, middleIdx, mainArray);
partition (auxiliaryArray, middleIdx + 1, endIdx, mainArray);
doMerge (mainArray, startIdx, middleIdx, endIdx, auxiliaryArray);
}
function doMerge(
mainArray,
startIdx,
middleIdx,
endIdx,
auxiliaryArray,
) {
let k = startIdx;
let i = startIdx;
let j = middleIdx + 1;
while (i <= middleIdx && j <= endIdx) {
if (auxiliaryArray[i] <= auxiliaryArray[j]) {
mainArray[k++] = auxiliaryArray[i++];
} else {
mainArray[k++] = auxiliaryArray[j++];
}
}
while (i <= middleIdx) {
mainArray[k++] = auxiliaryArray[i++];
}
while (j <= endIdx) {
mainArray[k++] = auxiliaryArray[j++];
}
console.log(auxiliaryArray, mainArray)
}
MergeSortCaller()
Output:-
Aux -> 7 2 9 3 Main -> 2 7 9 3
Aux -> 7 2 9 3 Main -> 2 7 3 9
Aux -> 2 7 3 9 Main -> 2 3 7 9
This code is a working implementation of the Merge Sort algorithm. I am puzzled by how in the third call of doMerge(), the auxiliaryArray gets modified even though no changes are made to it directly. All modifications seem to be applied to the mainArray instead. Can someone please explain this to me? Thank you.
Thanks...