void mergeSort(Item a[], int lo, int hi)
{
size_t nbytes = (hi+1)*sizeof(Item);
Item *aux = malloc(nbytes);
memcpy(aux, a, nbytes);
doMergeSort(a, aux, lo, hi);
free(aux);
}
void doMergeSort(Item a[], Item b[], int lo, int hi)
{
if (lo >= hi) return;
int mid = (lo+hi)/2;
doMergeSort(b, a, lo, mid);
doMergeSort(b, a, mid+1, hi);
merge(b+lo, mid-lo+1, b+mid+1, hi-mid, a+lo);
}
|