[SWEA] 병합 정렬

Date:

[SWEA] 병합 정렬

Problem URL : 병합 정렬

def merge_sort(arr):
    global ans
    if len(arr) < 2:
        return arr

    mid = len(arr) // 2
    low_arr = merge_sort(arr[:mid])
    high_arr = merge_sort(arr[mid:])

    merged_arr = []
    l = h = 0
    while l < len(low_arr) and h < len(high_arr):
        if low_arr[l] <= high_arr[h]:
            merged_arr.append(low_arr[l])
            l += 1
        else:
            merged_arr.append(high_arr[h])
            h += 1
    if l < len(low_arr):
        merged_arr += low_arr[l:]
        ans += 1
    else:
        merged_arr += high_arr[h:]
    return merged_arr


T = int(input())


for tc in range(1, T + 1):
    N = int(input())
    ans = 0
    nums = list(map(int, input().split()))
    sorted_nums = merge_sort(nums)

    print("#{} {} {}".format(tc, sorted_nums[N//2], ans))

Comments

만약 코딩테스트에서 라이브러리를 사용못하게 한다면,
구현하기도 쉽고, 시간복잡도도 O(Nlog(N))인 병합정렬을 사용하도록 하자.

댓글