STUDY_SEONMIN

2751. 수 정렬하기 2 본문

STUDY/Baekjoon Algorithm

2751. 수 정렬하기 2

Kululu_ 2021. 7. 25. 10:44

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

시간복잡도 O(nlogn)인 알고리즘으로 풀어보세요.

 

합병정렬

https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC

 

합병 정렬 - 위키백과, 우리 모두의 백과사전

합병 정렬 또는 병합 정렬(merge sort)은 O(n log n) 비교 기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. 존 폰 노이만이 1945

ko.wikipedia.org

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
        
    mid = len(arr)//2
    left_arr = merge_sort(arr[:mid])
    right_arr = merge_sort(arr[mid:])
    
    merged_arr = []
    i, j = 0, 0
    
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] <= right_arr[j]:
            merged_arr.append(left_arr[i])
            i += 1
        else:
            merged_arr.append(right_arr[j])
            j += 1
            
    merged_arr = merged_arr + left_arr[i:] + right_arr[j:]
    return merged_arr
    
N = int(input())
numbers = [int(input()) for _ in range(N)]
sorted_numbers = merge_sort(numbers)

for number in sorted_numbers:
    print(number)

 

 

  • 백준 알고리즘 사이트에서는 시간초과 문제로 인해 PyPy3파일로 제출해야 합니다.

'STUDY > Baekjoon Algorithm' 카테고리의 다른 글

2108. 통계학  (0) 2021.07.26
10989. 수 정렬하기 3  (0) 2021.07.25
2750. 수 정렬하기  (0) 2021.07.22
1436. 영화감독 숌  (0) 2021.07.22
1018. 체스판 다시 칠하기  (0) 2021.07.21
Comments