병합 정렬

hyun·2023년 7월 10일

코딩테스트

목록 보기
12/14
post-thumbnail

병합 정렬 : 분할 정복 방식을 사용해 데이터를 분할하고 분할한 집합을 정렬하며 합치는 알고리즘이다. 시간복잡도는 O(nlogn)이다.

병합정렬의 핵심은 그룹별로 나누어 정렬과 병합을 반복하여 최종 정렬된 결과 값을 얻는 것이다. 위의 그림을 예시로 순서를 설명하겠다.

  1. 8개의 데이터를 두개씩 묶어 4개의 그룹으로 나누어 정렬을 진행한다
  2. 정렬된 데이터를 다시한번 네 개씩 묶어 2개의 그룹으로 나누어 정렬을 진행한다.
  3. 마지막으로 두 그룹의 데이터를 정렬을 통해 완성을 해야 하는데 여기서 다시한번 등장하는 개념이 투포인터이다.
  4. 각 그룹의 제일 앞 단의 인덱스를 각각 pointer1, pointer2라 하자.
  5. pointer1과 pointer2를 비교하여 작은쪽이 최종배열에 들어가게 되고 작은쪽 pointer를 한칸 옮기고 다시 비교를 진행한다.
  6. 이 로직을 반복하여 만약 한 그룹의 데이터가 모두 옮겨지면(포인터가 그룹 배열의 끝에 도달하면) 나머지 그룹의 데이터는 이미 정렬이 된 상태이므로 그대로 최종배열에 넣어주면 된다.

0개의 댓글