728x90
반응형
SMALL

JavaScript의 Sort 알고리즘 변화: QuickSort → TimSort
📌 간단히 말하면
JavaScript의 `Array.sort()`가 사용하는 **정렬 알고리즘이 변경**되었습니다.
- **ES10 이전**: QuickSort (빠르지만 불안정할 수 있음)
- **ES10 이후**: TimSort (안정적이고 현실적으로 더 빠름)
---
🔄 QuickSort vs TimSort
QuickSort (과거)
장점: 평균적으로 매우 빠름 O(n log n)
단점:
- 최악의 경우 O(n²) 성능 저하
- 같은 값의 순서가 바뀔 수 있음 (불안정)
**예시**: [3, 1, 3, 2] 정렬 후 첫 번째 3과 두 번째 3의 순서가 뒤바뀔 수 있음
TimSort (현재)
장점:
- 최악의 경우에도 O(n log n) 보장
- 같은 값의 원래 순서 유지 (안정적)
- 실제 데이터에서 QuickSort보다 더 빠름
단점: 구현이 복잡함
💡 왜 TimSort로 바꿨나?
| 항목 | QuickSort | TimSort |
| 안정성 | ❌ 불안정 | ✅ 안정적 |
| 최악의 경우 | O(n²) 😱 | O(n log n) 🎯 |
| 실제 성능 | 평균적 | 더 좋음 |
| 실데이터 최적화 | ❌ | ✅ 정렬된/부분정렬된 데이터에 강함 |
📝 코드로 비교
// 안정성 테스트
const data = [
{ value: 3, id: 'A' },
{ value: 1, id: 'B' },
{ value: 3, id: 'C' },
{ value: 2, id: 'D' }
];
data.sort((a, b) => a.value - b.value);
// ES10+: 항상 id 'A'가 'C'보다 앞 (안정적) ✅
// ES10 이전: A와 C의 순서가 뒤바뀔 수 있음 (불안정) ❌
🎯 정리
**TimSort는 현대적인 정렬 알고리즘으로**
- ✅ 데이터 순서 보장 (안정성)
- ✅ 최악의 경우에도 빠름
- ✅ 실제 상황에서 더 효율적
Python, Java 등도 이미 TimSort를 사용하고 있으며, JavaScript도 따라간 것입니다! 🚀
728x90
반응형
LIST
'javascript' 카테고리의 다른 글
| 이터레이션 프로토콜: 자바스크립트의 순회 규칙 (0) | 2026.02.24 |
|---|---|
| 배열 변환 메서드 완벽 가이드: slice, Array.from, 스프레드 문법 (0) | 2026.02.24 |
| 클로저(Closure) 완벽 이해하기 (0) | 2026.02.06 |
| TypeScript: as const 객체 vs enum 비교 (0) | 2026.02.04 |
| encodeURI와 encodeURIComponent의 차이 (0) | 2026.02.02 |
댓글