function mergeSort(arr) {
let len = arr.length;
if (len <= 1) return arr;
let mid = Math.floor(len / 2);
let leftArr = arr.slice(0, mid);
let rightArr = arr.slice(mid);
return merge(mergeSort(leftArr), mergeSort(rightArr));
}
function merge(leftArr, rightArr) {
let left_len = leftArr.length;
let right_len = rightArr.length;
let arr = [];
let i = 0;
let j = 0;
while (i < left_len && j < right_len) {
leftArr[i] < rightArr[j] ? arr.push(leftArr[i++]) : arr.push(rightArr[j++]);
}
while (i < left_len) {
arr.push(leftArr[i++]);
}
while (j < right_len) {
arr.push(rightArr[j++]);
}
return arr;
}