병합 정렬 예제 - 1

문제 분석

  • N의 최대 범위가 1,000,000이므로 O(nlogn)의 시간 복잡도로 정렬을 수행하면 된다.

손으로 풀어보기

  1. 정렬할 그룹을 최소 길이로 나눈다. 예제 입력으로 예를 들면 2, 2, 1로 나눌 수 있다. 그리고 나눈 그룹마다 병합 정렬을 한다. 각 그룹마다 index 값을 비교하면서 정렬 용도로 선언한 temp배열에 병합 정렬한다.

  2. 병합된 그룹을 대상으로 정렬한다.

슈도코드

병합 정렬(start, end)
    start(시작점), end(종료점), mid(중간점)
    # 재귀 함수
    병합 정렬(start, mid)
    병합 정렬(mid + 1, end)
    for start ~ end:
        temp 리스트 저장
    
    # 두 그룹 병합
    index1(앞쪽 그룹 시작점)
    index2(뒤쪽 그룹 시작점)
    while index1 <= 중간점 and index2 <= 종료점:
        양쪽 그룹의 index가 가리키는 값을 비교한 후 더 작은 수를 선택해 리스트에 저장하고
        선택된 데이터의 index값을 오른쪽으로 한 칸 이동
        반복문이 끝난 후 남아있는 데이터 정리

n(수의 개수)
a(리스트 선언)
temp(정렬할 때 잠시 사용할 리스트 선언)

for n:
    a 리스트 저장
    
병합 정렬 수행

결과 출력

코드 구현 - 파이썬

코드 구현 - 자바

Last updated