Programing/Algorithm

병합 정렬 (Merge Sort) 설명과 JavaScript 예제

2025. 5. 21. 08:45
반응형

병합 정렬은 대표적인 분할 정복(Divide and Conquer) 알고리즘으로, 배열을 절반으로 나누고 각각 정렬한 후 다시 병합하여 정렬을 완성하는 방식입니다. 시간 복잡도가 항상 일정(O(n log n))하기 때문에 안정적이며, 정렬 성능이 중요한 경우 많이 사용됩니다.


1. 동작 원리

  1. 배열을 반으로 나눔 (재귀적으로 반복)
  2. 더 이상 나눌 수 없을 때까지 분할
  3. 두 개의 정렬된 배열을 병합하면서 하나의 정렬된 배열로 만듬

이러한 구조는 재귀 호출과 정렬된 병합이 핵심입니다.


2. JavaScript 예제 - 오름차순 정렬

function mergeSort(arr) {
  if (arr.length <= 1) return arr;

  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid));
  const right = mergeSort(arr.slice(mid));

  return merge(left, right);
}

function merge(left, right) {
  const result = [];
  let i = 0;
  let j = 0;

  while (i < left.length && j < right.length) {
    if (left[i] < right[j]) {
      result.push(left[i++]);
    } else {
      result.push(right[j++]);
    }
  }

  return result.concat(left.slice(i)).concat(right.slice(j));
}

console.log(mergeSort([38, 27, 43, 3, 9, 82, 10]));
// [3, 9, 10, 27, 38, 43, 82]
  • 배열을 계속 반으로 나눈 뒤, merge() 함수로 정렬 병합
  • 병합 과정은 항상 두 배열이 정렬되어 있다는 가정 하에 수행됨

3. 성능 분석

구분 시간 복잡도
최선의 경우 O(n log n)
평균 O(n log n)
최악의 경우 O(n log n)
  • 공간 복잡도: O(n) → 임시 배열 사용 필요
  • 안정 정렬: 동일한 값의 순서가 유지됨

4. 병합 정렬의 특징

  • 항상 일정한 시간 복잡도 → 예측 가능한 성능
  • 배열의 크기가 클수록 버블, 선택, 삽입 정렬보다 월등한 성능
  • 공간이 허용된다면 매우 효율적인 알고리즘

마무리

병합 정렬은 많은 정렬 알고리즘 중에서도 안정적이고 신뢰할 수 있는 성능을 제공하는 방식입니다. 특히 대용량 데이터를 다룰 때 유용하며, 내부적으로 다른 고급 정렬에서도 병합 정렬 방식이 활용되기도 합니다.

단점은 추가 메모리 공간이 필요하다는 점이므로, 메모리 제한이 있는 환경에서는 주의가 필요합니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

이진 탐색 (Binary Search) 설명과 JavaScript 예제  (0) 2025.05.22
선형 탐색 (Linear Search) 설명과 JavaScript 예제  (0) 2025.05.22
계수 정렬 (Counting Sort) 설명과 JavaScript 예제  (0) 2025.05.22
퀵 정렬 (Quick Sort) 설명과 JavaScript 예제  (1) 2025.05.22
삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제  (0) 2025.05.21
선택 정렬 (Selection Sort) 설명과 JavaScript 예제  (0) 2025.05.21
버블 정렬 (Bubble Sort) 설명과 JavaScript 예제  (0) 2025.05.21
jvascript array 경우의 수 구하기 (permute)  (0) 2022.02.15
'Programing/Algorithm' 카테고리의 다른 글
  • 계수 정렬 (Counting Sort) 설명과 JavaScript 예제
  • 퀵 정렬 (Quick Sort) 설명과 JavaScript 예제
  • 삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제
  • 선택 정렬 (Selection Sort) 설명과 JavaScript 예제
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바스크립트유틸
    자바
    php
    It
    블로그
    자바스크립트
    IT·컴퓨터
    JavaScript
    IT블로그
    SQL
    위시리스트
    iT's MY LiFE
    js패턴
    사고 싶은 책
    Java
    읽고 싶은 책
    디자인패턴
    IT 관련
    기초
    jsp
Dongkkase
병합 정렬 (Merge Sort) 설명과 JavaScript 예제
상단으로

티스토리툴바