Merge Sort와 Insertion Sort를 결합한 Merge Insertion Sort
void merge_insertion_sort_vec(std::vector<int> &vec, int left, int right, int size)
{
if (left >= right)
return;
// 비교할 크기가 size보다 작다면 삽입정렬
if (right - left + 1 <= size)
{
insertion_sort(vec, left, right);
return;
}
// 크기를 절반으로 나눠 재귀로 호출
int mid = (left + right) / 2;
merge_insertion_sort_vec(vec, left, mid, size);
merge_insertion_sort_vec(vec, mid + 1, right, size);
// 여태 나눠진 모든 리스트들이 size보다 작아져서 삽입정렬이 완료됬다면 합병정렬로 합쳐주기
merge_sort(vec, left, mid, right);
}