병합정렬이란
병합정렬(Merge Sort)은 분할 정복(Divide and Conquer) 알고리즘의 일종으로, 배열을 반으로 나누어 각각을 정렬한 후 합치는 과정을 반복하여 정렬을 완료하는 알고리즘.
- 병합정렬은 안정 정렬로, 같은 값의 원소들 간의 순서가 바뀌지 않음.
병합정렬 요약
특징 |
|
장점 |
|
단점 |
|
시간복잡도 |
|
공간복잡도 |
|
자바스크립트 예시
// 병합 함수: 두 개의 정렬된 배열을 하나의 정렬된 배열로 합칩니다.
function merge(left, right) {
let resultArray = [], leftIndex = 0, rightIndex = 0;
// 두 배열의 각 요소를 비교하여 작은 값을 결과 배열에 추가합니다.
while (leftIndex < left.length && rightIndex < right.length) {
if (left[leftIndex] < right[rightIndex]) {
resultArray.push(left[leftIndex]);
leftIndex++;
} else {
resultArray.push(right[rightIndex]);
rightIndex++;
}
}
// 왼쪽 배열에 남은 요소를 결과 배열에 추가합니다.
while (leftIndex < left.length) {
resultArray.push(left[leftIndex]);
leftIndex++;
}
// 오른쪽 배열에 남은 요소를 결과 배열에 추가합니다.
while (rightIndex < right.length) {
resultArray.push(right[rightIndex]);
rightIndex++;
}
return resultArray;
}
// 병합 정렬 함수: 배열을 반으로 나누어 재귀적으로 정렬합니다.
function mergeSort(array) {
if (array.length <= 1) {
return array;
}
const middleIndex = Math.floor(array.length / 2);
const leftArray = array.slice(0, middleIndex);
const rightArray = array.slice(middleIndex);
return merge(mergeSort(leftArray), mergeSort(rightArray));
}
// 테스트
const array = [34, 7, 23, 32, 5, 62];
const sortedArray = mergeSort(array);
console.log(sortedArray);
'Algorithm' 카테고리의 다른 글
동적 프로그래밍 - 메모이제이션 (0) | 2024.07.18 |
---|---|
정렬 (Sort) - 퀵정렬 (0) | 2024.07.16 |
정렬 (Sort) - 삽입정렬 (0) | 2024.07.13 |
정렬 (Sort) - 선택정렬 (0) | 2024.07.12 |
정렬 (Sort) - 버블정렬 (1) | 2024.07.09 |