>>710
書き出しは void margesort(recordtype a[], int n) とする。
なのに元は void margesort(recordtype a[], int l, int r) なの?
言ってることなにかおかしくない?
とりあえず 710 を無視して 709 の条件で書くと

void mergesort(recordtype a[], int n)
{
if(n > 1){
recordtype *b = malloc(sizeof(recordtype) * n);
int m = n / 2, i = 0, j = 0, k = m;
mergesort(a, m);
mergesort(a + m, n - m);
while (j < m && k < n) {
if (strcmp(a[j].key, a[k].key) < 0) {
b[i++] = a[j++];
} else {
b[i++] = a[k++];
}
}
while (j < m) b[i++] = a[j++];
while (k < n) b[i++] = a[k++];
for (i = 0; i < n; i++) a[i] = b[i];
free(b);
}
}

こんな感じでしょか