...
...
...
function mergeSort(start, end) {
if (Math.abs(end - start) <= 1) return;
let mergeFrom = 0;
let mergeTo = 1;
let width;
let i;
for (width = 1; width < end; width *= 2) {
...
for (i = 0; i < end; i += 2 * width) {
merge(mergeFrom, i, Math.min(i + width, end), Math.min(i + 2 * width, end), mergeTo);
}
mergeFrom = (mergeFrom === 0 ? 1 : 0);
mergeTo = 1 - mergeFrom;
}
if (mergeFrom !== 0) {
...
copy(mergeFrom, mergeTo, start, end);
}
}
function merge(mergeFrom, start, middle, end, mergeTo) {
let i = start;
let j = middle;
let k;
...