Skip to content

Instantly share code, notes, and snippets.

@iJustErikk
Created December 1, 2020 14:19
Show Gist options
  • Save iJustErikk/ae6746c626a8c7d5f6e722166724f234 to your computer and use it in GitHub Desktop.
Save iJustErikk/ae6746c626a8c7d5f6e722166724f234 to your computer and use it in GitHub Desktop.
// recursively divides then merges
const mergeSort = (curSubArr) => {
if (curSubArr.length <= 1) return curSubArr;
const middle = Math.floor(curSubArr.length / 2);
const left = curSubArr.slice(0, middle);
const right = curSubArr.slice(middle);
return merge(mergeSort(left), mergeSort(right));
};
const merge = (left, right) => {
let pointerA = 0;
let pointerB = 0;
let merged = [];
// stops when one array is used
while (pointerA < left.length && pointerB < right.length) {
if (left[pointerA] < right[pointerB]) {
merged.push(left[pointerA]);
pointerA += 1;
} else {
merged.push(right[pointerB]);
pointerB += 1;
}
}
// stage arrays for gc
arr1 = [];
arr2 = [];
// handle left overs
return merged.concat(left.slice(pointerA)).concat(right.slice(pointerB));
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment