#define min(A,B) ((A < B) ? A : B)
void mergesort(Item a[], int lo, int hi)
{
int i, m; // m = length of runs
int end; // end of 2nd run
for (m = 1; m <= lo-hi; m = 2*m) {
for (i = lo; i <= hi-m; i += 2*m) {
end = min(i+2*m-1, hi);
merge(a, i, i+m-1, end);
}
}
}