CS STUDY/알고리즘

병합 정렬(Merge Sort)

cha_eyoon 2024. 3. 5. 09:12

병합 정렬(Merge Sort)

개념
  • 분할 정복 알고리즘 
  • 주어진 배열을 원소가 하나 밖에 남지 않을 때까지 계속 둘로 쪼갠 후 다시 크기 순으로 재배열
  • 안정 정렬 

코드
def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]

    left = merge_sort(left)
    right = merge_sort(right)

    return merge(left, right)

def merge(left, right):
    result = []
    i = 0
    j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    while i < len(left):
        result.append(left[i])
        i += 1

    while j < len(right):
        result.append(right[j])
        j += 1

    return result

 

특징
  • 장점
    • 데이터의 분포에 영향을 덜 받는다.
  • 단점 
    • 임시 배열이 필요하다.
간 복잡도
  • 분할 단계
    • 비교 연산과 이동 연산이 수행되지 않는다.
  • 합병 단계
    • 순환 호출의 깊이 만큼의 합병 단계(log2N) * 각 합병 단계의 비교 연산(N) = Nlog2N

 

참고

https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html

 

[알고리즘] 합병 정렬(merge sort)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io