[알고리즘] 병합정렬

이경준·2021년 6월 30일
0

알고리즘

목록 보기
5/17

병합정렬

  • 재귀용밥을 활용한 정렬 알고리즘
    1. 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.
    1. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.
    2. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다.

코드

def merge(left, right):
    merged = list()
    left_point, right_point = 0, 0
    
    # case1 - left/right 둘다 있을때
    while len(left) > left_point and len(right) > right_point:
        if left[left_point] > right[right_point]:
            merged.append(right[right_point])
            right_point += 1
        else:
            merged.append(left[left_point])
            left_point += 1

    # case2 - left 데이터가 없을 때
    while len(left) > left_point:
        merged.append(left[left_point])
        left_point += 1
        
    # case3 - right 데이터가 없을 때
    while len(right) > right_point:
        merged.append(right[right_point])
        right_point += 1
    
    return merged


def mergesplit(data):
    if len(data) <= 1:
        return data
    medium = int(len(data) / 2)
    left = mergesplit(data[:medium])
    right = mergesplit(data[medium:])
    return merge(left, right)

시간 복잡도

O(n logn)

profile
The Show Must Go On

0개의 댓글

관련 채용 정보