const merge = (leftArray, rightArray) => {
const result = [];
let leftPoint = 0;
let rightPoint = 0;
while (leftPoint < leftArray.length && rightPoint < rightArray.length) {
if (leftArray[leftPoint] < rightArray[rightPoint]) {
result.push(leftArray[leftPoint]);
leftPoint++;
}
if (leftArray[leftPoint] > rightArray[rightPoint]) {
result.push(rightArray[rightPoint]);
rightPoint++;
}
}
while (leftPoint < leftArray[leftPoint]) {
result.push(leftArray[leftPoint]);
leftPoint++;
}
while (rightPoint < rightArray[rightPoint]) {
result.push(rightArray[rightPoint]);
rightPoint++;
}
return result;
};
const mergeSort = (array) => {
if (array.length <= 1) return array;
let mid = Math.floor(array.length / 2);
let left = mergeSort(array.slice(0, mid));
let right = mergeSort(array.slice(mid));
const result = merge(left, right);
return result;
};
시간복잡도 | O(N) |
---|
Best | O(nlogn) |
Average | O(nlogn) |
Worst | O(nlogn) |