void Merg(datatype a[], int n,datatype swap[],int k) { //归并排序
int m = 0, u1, u2, i, j, l2;
int l1 = 0;
while (l1 + k <= n - 1) {
l2 = l1 + k;
u1 = l2 - 1;
u2 = (l2 + k - 1 <= n - 1) ? 12 + k - 1 : n - 1;
for (i = l1, j = l2; i <= u1 && j <= u2; m++) {
if (a[i].key <= a[j].key) {
swap[m] = a[i];
i++;
}
else {
swap[m] = a[j];
j++;
}
}
while (i <= u1) {
swap[m] = a[i];
m++;
i++;
}
while (j <= u2) {
swap[m] = a[j];
m++;
j++;
}
l1 = u2 + 1;
}
for (i = l1; i < n; i++, m++)
swap[m] = a[i];
}
void MergeSort(datatype a[], int n) {
int i, k = 1;
datatype swap[100];
while (k < n) {
Merg(a, n, swap, k);
for (i = 0; i < n; i++)
a[i] = swap[i];
k = 2 * k;
}
free(swap);
}
void suijiMergeSort() { //归并排序结果
datatype array[15];
int i;
printf("排序前生成随机数为:\n");
srand((unsigned)time(NULL));
for (i = 0; i < 15; i++) {
array[i].key = rand() % 100;
printf("%d ", array[i].key);
}
printf("\n\n归并排序结果 :\n");
MergeSort(array, 15);
for (i = 0; i < 15; i++) {
printf("%d ", array[i].key);
}
printf("\n");
}