Search
🤖

Tim Sort의 동작 방식

1.
Run 탐지
입력 배열을 훑으면서 이미 오름차순(또는 내림차순)으로 정렬된 구간(run) 을 찾습니다.
내림차순 run은 뒤집어서 오름차순으로 맞추고, 길이가 너무 짧은 run은 이진 삽입 정렬로 확장합니다.
minrun(보통 32~64 사이)이라는 최소 run 길이를 목표로 하여, 나중 병합 비용을 줄입니다.
2.
Run 스택과 불변식(Invariants)
찾은 run들을 스택에 쌓고, 스택의 인접 run 크기 관계를 제어하는 불변식을 유지합니다.
이 불변식은 병합 순서를 조절하여 병합의 총 비용을 상한하고 **최악의 경우에도 O(n log n)**을 보장합니다.
3.
병합(Merge) + 갈로핑(Galloping) 모드
병합은 기본적으로 전형적인 안정 병합(merge) 입니다.
두 run 중 하나의 원소가 연속으로 많이 선택되는 상황이 감지되면 갈로핑(galloping) 으로 전환해 이진 탐색 기반으로 큰 덩어리를 한 번에 복사하여 속도를 높입니다. (데이터가 한쪽 run에 몰려 있으면 매우 효율적)
4.
적응성(Adaptive)
이미 정렬된 입력, 거의 정렬된 입력, 작은 블록들이 일부 섞인 입력에서 특히 효율적입니다.
그래서 “이미 어느 정도 정렬된 리스트를 다시 정렬”하는 실제 UI 시나리오에 강합니다.