sort
sort
: JavaScript를 해석하는 엔진에서 어떻게 구현했으냐에 따라서 정렬된 알고리즘이 달라짐Tim Sort
를 사용함Merge Sort
를 사용함Insertion Sort
와 Merge Sort
를 결합하여 만든 정렬 알고리즘상수
C
- 알고리즘이
참조 지역성
(Locality of reference) 원리를 얼마나 잘 만족하는가를 나타내는 값- 참조 지역성 원리 : CPU가 미래에 원하는 데이터를 예측하여 캐시 메모리에 담아 놓는데 이때의 예측률을 높이기 위해 사용하는 원리
- 최근에 참조한 메모리나 그 메모리에 인접한 메모리를 다시 참조할 확률이 높다는 이론을 기반으로 캐시 메모리에 담아 놓는것
- 메모리를 연속적으로 읽는 작업은 캐시 메모리에서 읽어오기에 빠른 반면에, 무작위로 읽는 작업은 메인 메모리에서 읽어오기에 속도가 비교적 느림
Tim sort의 동작시간에서 a를 유지하면서 x를 크게 하기 위한 방법
minrun
)씩 잘라 각각을 Insertion sort로 정렬하되, 그 이후에는 Insertion sort를 진행하지 않고 덩어리(run
)를 최대한 크게 만들어서 병합횟수를 줄이는 것Tim sort에서 minrun의 크기 : min(N, 2^5 ~ 2^6) (N: 전체 원소의 개수)
위 그림에 대한 해설
병합이 필요 없는 구간을 계산하는 과정을 이분 탐색으로 진행할 경우, run의 길이가 k일 때 O(logk)의 시간이 소요됨
One pair at a time mode
)Galloping mode
로 전환됨