def merge_sort(arr) :
    n = len(arr)

    # basis case
    if n <= 1 :
        return arr

    mid = n//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, j = 0, 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

    result.extend(left[i:])
    result.extend(right[j:])

    return result

print(merge_sort([9,3,55,5,5,7,1,1,2,10,22]))

 

 

병합 메서드 이렇게도 구현 가능

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

    while left and right :
        if left[0] < right[0] :
            result.append(left.pop(0))
        else:
            result.append(right.pop(0))

    result.extend(left)
    result.extend(right)

    return result

'알고리즘' 카테고리의 다른 글

88. Merge Sorted Array  (0) 2024.12.02
삽입 정렬  (0) 2024.12.02
슬라이딩 윈도우로 원형 수열의 부분합 구하기  (0) 2024.11.30
하샤드 수  (0) 2024.11.21
시저 암호  (0) 2024.09.02

+ Recent posts