Toolofv 님의 블로그

[Python] 병합 정렬(Merge Sort) 본문

Algorithm

[Python] 병합 정렬(Merge Sort)

Toolofv 2025. 1. 30. 01:51

 

 

정렬 알고리즘은 사실 실제로 구현해서 사용할 일은 없는 것 같다. 매일 잊어먹기 때문에 기록의 용도로 올린다. 병합 정렬(Merge Sort)의 시간복잡도는 최악의 경우부터 최선의 경우 모두 $O(n\ log\ n)$이고, 공간복잡도는 $O(n)$이다. 배열의 크기에 비례하는 공간이 필요하다. 

 

병합 정렬(Merge Sort)

 

 

병합 정렬은 배열을 재귀함수로 계속 분할하고 끝에서부터 병합하면서 정렬이 되는 구조다. 타고타고 병합이 완료되면서 정렬된다.

 

- 코드

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

d = [1, 6, 8, 2, 9, 3, 7, 5, 4]

def merge_sort(d):
    if len(d) < 2:
        return d
    mid = len(d)//2
    l = merge_sort(d[:mid])
    r = merge_sort(d[mid:])
    i, j = 0, 0
    res = []
    while True:
        if i >= len(l) or j >= len(r):
            break
        if l[i] <= r[j]:
            res.append(l[i])
            i += 1
        else:
            res.append(r[j])
            j += 1
    if l[i:]:
        res.extend(l[i:])
    if r[j:]:
        res.extend(r[j:])
    return res

print(merge_sort(d))

 

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

d = [1, 6, 8, 2, 9, 3, 7, 5, 4]

def merge_sort(d):
    if len(d) < 2:
        return d
    mid = len(d)//2
    l = merge_sort(d[:mid])
    r = merge_sort(d[mid:])
    return merge(l, r)

def merge(l, r):
    if len(l) == 0 or len(r) == 0:
        return l or r
    i, j = 0, 0
    res = []
    while True:
        if i >= len(l) or j >= len(r):
            break
        if l[i] <= r[j]:
            res.append(l[i])
            i += 1
        else:
            res.append(r[j])
            j += 1
    if l[i:]:
        res.extend(l[i:])
    if r[j:]:
        res.extend(r[j:])
    return res

print(merge_sort(d))

 

 

 

 

[Python] 퀵 정렬(Quick Sort)

퀵 정렬(Quick Sort)은 병합 정렬(Merge Sort)와 비슷하게 분할정복(Divide and Conqueror)의 방법으로 정렬되는 알고리즘이다. 퀵 정렬은 시간복잡도로는 복불복이다. 최선, 평균의 경우 $O(n\ log\ n)$이지만

toolofv.tistory.com

 

 

[Python] 힙 정렬(Heap Sort)

힙(Heap) 정렬 알고리즘은 정렬의 용도로 주로 쓰인다고 볼 수는 없는 것 같다. 힙 자료구조는 원소가 들어갈 때 최댓값, 최소값을 꺼내쓰는데 효율적이기 때문에 다익스트라(dijkstra) 알고리즘같

toolofv.tistory.com

 

 

 

반응형

'Algorithm' 카테고리의 다른 글

[Python] 퀵 정렬(Quick Sort)  (0) 2025.01.31
[Python] 힙 정렬(Heap Sort)  (0) 2025.01.28
[Python] 백준 - 2583 영역 구하기  (0) 2025.01.26
[Python] 백준 - 2573 빙산  (1) 2024.12.27
[Python] 백준 - 10026 적록색약  (0) 2024.12.10