1function mergeSort(array) {
2 function sort(left, right) {
3 if (left >= right) return;
4 const mid = Math.floor((left + right) / 2);
5 sort(left, mid);
6 sort(mid + 1, right);
7 merge(left, mid, right);
8 }
9 function merge(left, mid, right) {
10 // Copy to temporary arrays
11 // leftArr = array[left..mid]
12 // rightArr = array[mid+1..right]
13 let i = 0, j = 0, k = left;
14 while (i < n1 && j < n2) {
15 if (leftArr[i] <= rightArr[j]) {
16 array[k++] = leftArr[i++];
17 } else {
18 array[k++] = rightArr[j++];
19 }
20 }
21 // Copy remaining elements
22 while (i < n1) array[k++] = leftArr[i++];
23 while (j < n2) array[k++] = rightArr[j++];
24 }
25 sort(0, array.length - 1);
26}