How implement merge sort algorithm in JavaScript
Merge sort algorithm was invented by John von Neumann in 1945. It is an efficient sorting algorithm using a divide and conquer approach.
-
The Merge sort algorithm repeatedly divides the array into smaller chunks until we no longer divide the array into chunks.
-
Then it repeatedly merges the chunks of the array to get a sorted array.
Example array : [3,4,2,1]
- First, we need to divide the array into smaller chunks until we no longer divide the array into chunks.
left right
[3 , 4] [2, 1]
[3] [4] [2] [1]- We need to merge the smaller chunks to get the sorted array.
Compare 3 and 4 they are already sorted so that we moved 2 and 1 where 2 > 1 so put 1 first and second 2.
left right
[3 , 4] [ 2, 1 ]
[3] [4] [2] [1]
[3, 4] [1 ,2]
Now, compare the left part index of 0 and right part index of 0 which are 3 and 1.
Where 1 is smaller than 3 so that we removed 1 from the right part and push into the sorted list.
left right
[3 , 4] [1, 2]
[3] [4] [2] [1]
[3, 4] [2]
sorted array [ 1 ]Again we checked 3 and 2 and removed 2 from the right part and push into the sorted list
left right
[ 3 , 4 ] [ 1, 2 ]
[3] [4] [2] [1]
[3, 4] [ ]
sorted array [1,2]Now, we need to merge the left part and right part with the sorted list.
left right
[3 , 4] [1, 2]
[3] [4] [2] [1]
[3, 4] [ ]
sorted array [ 1 ,2 ,3, 4]Algorithm implementation
Let’s implement a Merge sort algorithm in JavaScript.
function mergeSort(array,half = array.length/2){
if(array.length < 2){
return array // it means we no longer divide the array
// into smaller chunks
}
const left = array.splice( 0,half ); //left part of the array
return merger( mergeSort( left ),mergeSort( array ) )
}In the above code, we are using a splice method to remove the left part of the array. The remaining part of the array is the right part.
Next, we need to implement a merger function which helps us to combine the left and right part of the array and returns the sorted list.
function merger(left, right) {
const arr = [ ];
while (left.length && right.length) {
if (left[ 0 ] < right[ 0 ]) {
arr.push( left.shift( ) ) // remove from the left part and push into
//the sorted array
} else {
arr.push( right.shift( ) ) // remove from the right part and push into
//the sorted array
}
}
return [ ...arr, ...left, ...right ];
}Full code
function mergeSort(array,half = array.length/2){
if(array.length < 2){
return array
}
const left = array.splice(0,half); //left part of array
return merger(mergeSort(left),mergeSort(array))
}
function merger(left,right){
const arr = [];
while(left.length && right.length){
if(left[0] < right [0]){
arr.push(left.shift())
}else{
arr.push(right.shift())
}
}
return [...arr,...left,...right];
}
console.log(mergeSort([10,5,3,8,2,6,4,7,9,1]));
//Output -> [1,2,3,4,5,6,7,8,9,10]
Codepen demo
Tested using mocha and chai


