2. Divide & Conquer Algorithm (2) Merge Sort


Sanjoy Dasgupta가 저술한 책인 Algorithms과 이기창님의 블로그, Heee님의 블로그를 참고하였다.


1. Merge Sort(합병정렬)

데이터를 쪼갤 수 없을 때 까지 쪼갠 뒤(Devide), 둘씩 크기를 비교해 정렬하며(Conquer) 합치는(Merge) 방법

Merge Sort(합병정렬)를 그림으로 쉽게 나타내면 다음과 같다.(그림출처)

  1. 기존에 $p$(시작점)부터 $r$(끝점)까지 데이터가 있었다면 , $q$(기준점)를 기준으로 데이터를 두 개로 쪼갠다.
  2. 다시 쪼개진 각각의 데이터의 $p$와 $r$로부터 $q$를 선정하여 쪼개며, 데이터가 더이상 쪼개질 수 없는 최소의 단위가 될 때 까지 이를 반복한다.
  3. 쪼개진 데이터를 두 개씩 비교하며 정렬하며 합친다.
  4. 다시 합쳐진 데이터를 또 두 개씩 비교해서 정렬하며 합치며, 모든 데이터가 하나로 합쳐질 때 까지 이를 반복한다.
  5. 그럼 최종적으로, 이쁘게 정렬된 하나의 데이터가 완성된다.


2. Merge Sort(합병정렬)의 특징

우선 정렬 알고리즘은 Stable 한지, 그리고 In-place 한지에 따라 성격이 구분된다.

- Stable : 같은 값의 위치(순서)가 정렬 과정에서 뒤바뀌지 않는 경우

- In-place : 탐색대상을 정렬할 때 추가적인 메모리 공간이 필요하지 않은 경우(데이터가 저장된 그 공간에서 정렬이 가능)

그렇다면 Merge Sort는 어떨까?


3. Merge Sort(합병정렬)의 장단점


4. Merge Sort(합병정렬)의 시간복잡도


참고로 시간복잡도를 매스터 정리로 구하는 방법은 다음과 같다.

  1. $ T(n) = 2T(\frac n 2) + O(n)$
  2. $a = 2, b = 2, d = 1$ 이므로
  3. 시간복잡도는