void merge(Item a[], int lo, int mid, int hi)
{
int i, j, k, nitems = hi-lo+1;
Item *tmp = malloc(nitems*sizeof(Item));
i = lo; j = mid+1; k = 0;
while (i <= mid && j <= hi) {
if (less(a[i],a[j]))
tmp[k++] = a[i++];
else
tmp[k++] = a[j++];
}
while (i <= mid) tmp[k++] = a[i++];
while (j <= hi) tmp[k++] = a[j++];
for (i = lo, k = 0; i <= hi; i++, k++)
a[i] = tmp[k];
free(tmp);
}
|