하나의 배열을 두 개의 균등한 크기로 분할하고, 부분 정렬하며, 이를 다시 합하면서 전체를 정렬해가는 알고리즘
O(nlogN)
let mergeSort = (arr) => {
if (arr.length <= 1) return arr;
const mid = (arr.length / 2).toFixed(0);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));
let sorted = [];
let i = 0, j = 0;
while (i < left.length && j < right.length) {
if (left[i] < right[j]) {
sorted.push(left[i]);
i++;
} else {
sorted.push(right[j]);
j++;
}
}
if (i < left.length) sorted.push(...left.slice(i));
if (j < right.length) sorted.push(...right.slice(j));
return sorted;
}