Classic Merge Sort
void merge_sort(A,p,r)
{
if (r - p > 1)
{
q = (p+r)/2; // integer arithmetic
merge_sort(A,p,q); // recursive call
merge_sort(A,q,r); // recursive call
merge(A,p,q,r); // defined below
}
}
void merge(T* A, size_t p, size_t q, size_t r)
{
T B [r-p]; // temp space for merged copy of A
g_set_merge(A+p, A+q, A+q, A+r, B); // merge the two parts of A to B
g_copy(B, B+(r-p), A+p); // copy B back to A[p,r)
}
- Stable
- Runtime = Θ(n log n)
- Runspace = +Θ(n)
- No way around #3 for arrays, vectors, deques