merge sort

병합 정렬의 핵심 계약: “두 입력은 이미 정렬돼 있다”

재귀 호출은 정렬된 배열을 반환하고, 병합 단계는 가장 작은 원소를 앞에서부터 선택해 같은 계약을 상위 호출로 넘깁니다.

분할 전 입력

9153 7264
반씩 줄임

하위 호출 반환

left
1359
right
2467
병합 불변식

left와 right의 아직 남은 구간은 각각 정렬돼 있고, merged에는 지금까지 뽑은 값 중 가장 작은 값들이 순서대로 들어 있습니다.

비교하며 병합

1234 5679
계약 전달

상위 호출의 반환

1234 5679
기저 조건

길이 0 또는 1은 이미 정렬된 배열입니다.

동률 처리

<=로 왼쪽 값을 먼저 뽑으면 안정성이 유지됩니다.

잔여 구간

한쪽이 비면 다른 한쪽의 남은 값을 모두 붙입니다.