Tim sort는 2002년에 Tim Peters라는 개발자가 만든 정렬 알고리즘으로
삽입 정렬(Insertion sort)과 병합 정렬(Merge sort)을 섞은 알고리즘입니다
배열이 이미 정렬되어있거나 긴 run(부분 배열)이 하나만 존재할 경우 O(n)의 시간복잡도를 가집니다
여러 개의 run이 생성되고, 각 run을 삽입정렬하는 과정에서 log n의 시간복잡도가 발생합니다
또한 이 run들을 병합하는 과정에서 n만큼의 시간복잡도가 발생해 전체 시간복잡도는 O(nlogn)입니다
팀 정렬은 병합 과정에서 두가지 run중 하나만 임시 메모리에 복사해서 사용하기 때문에 공간복잡도 효율이 좋습니다
이미 정렬된 run이 하나만 생기기 때문에 병합이 거의 없어서 추가 메모리를 거의 사용하지 않습니다
여러 run을 병합하는 과정에서 일부를 임시공간에 저장해야하기 때문에 logn 수준의 추가 메모리가 필요합니다
두 run 중 하나가 전체 크기의 첮랍ㄴ에 가까울 경우 해당 run을 복사해야하기 때문에 n/2만큼의 메모리가 필요합니다
Arrays.sort()로 구현되어있습니다팀 정렬은 삽입 정렬의 빠른 처리와 병합 정렬의 안정성을 동시에 갖춘 알고리즘입니다
최악의 경우에도 시간 복잡도가 O(nlogn)을 넘지 않고,
병합 시 최대 O(n/2) 수준의 추가 메모리만 사용하기 때문에 효율적인 정렬 알고리즘입니다