void mergeSort(Item a[], int lo, int hi)
{
int i;
Item *aux = malloc((hi+1)*sizeof(Item));
for (i = lo; i <= hi; i++) aux[i] = a[i];
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);
}
|