I am trying to understand the recursion in merge sort. // merge sort
var arr = [1,5,3,0];
function mergeSort(arr) {
if(arr.length == 1)
return arr;
if(arr.length > 1) {
let breakpoint = Math.ceil((arr.length/2));
// Left list starts with 0, breakpoint-1
let leftList = arr.slice(0,breakpoint);
// Right list starts with breakpoint, length-1
let rightList = arr.slice(breakpoint,arr.length);
// Make a recursive call
leftList = mergeSort(leftList);
rightList = mergeSort(rightList);
var a = merge(leftList,rightList);
return a;
}
}
function merge(leftList,rightList) {
let result = [];
while(leftList.length && rightList.length) {
if(leftList[0] <= rightList[0]) {
result.push(leftList.shift());
}else{
result.push(rightList.shift());
}
}
while(leftList.length)
result.push(leftList.shift());
while(rightList.length)
result.push(rightList.shift());
return result;
}
console.log(mergeSort(arr));
The program works fine, but I do not understand the recursion here. In spite of having multiple return statements, why does the program only print :
[0,1,3,5]
How does the result get printed, how the recursion is working here?