flowchart TD
A[Input array] --> B{len 1}
B -- Yes --> C[Return array]
B -- No --> D[Split mid]
D --> E[MergeSort left]
D --> F[MergeSort right]
E --> G[Merge two sorted arrays]
F --> G
G --> H[Return merged result]
sequenceDiagram
participant Caller
participant Left
participant Right
participant Merge
Caller->>Left: sort left half
Caller->>Right: sort right half
Left-->>Merge: sorted left
Right-->>Merge: sorted right
Merge-->>Caller: stable merged array
# [Merge Sort 템플릿: 아키텍트 버전]# Use Case: 안정적인 O(N log N) 정렬# Components: Divide, Merge# Constraint: O(N) 추가 공간 필요defmerge_sort(arr):# 1. 베이스 케이스 (Base Case)iflen(arr)<=1:returnarr# 2. 분할 레이어 (Division Layer)mid=len(arr)//2left=arr[:mid]right=arr[mid:]# 3. 재귀 정복 (Recursive Conquer)left=merge_sort(left)right=merge_sort(right)# 4. 병합 레이어 (Merge Layer)returnmerge(left,right)defmerge(left,right):# 1. 초기화 (Initialization)result=[]i=j=0# 2. 병합 루프 (Merge Loop)# - 두 배열을 비교하며 작은 것부터 추가whilei<len(left)andj<len(right):ifleft[i]<=right[j]:result.append(left[i])i+=1else:result.append(right[j])j+=1# 3. 잔여 처리 (Remaining Elements)result.extend(left[i:])result.extend(right[j:])returnresult