#include <stdio.h>
#include <string.h>
#define INF 1<<16
#define maxn 10000
void Merge(int A[], int p, int q, int r){
int n1, n2, i, j, k;
int L[maxn + 1], R[maxn + 1];
n1 = q - p + 1;
n2 = r - q;
for (i = 1; i <= n1; i++)
L[i] = A[p + i - 1];
for (j = 1; j <= n2; j++)
R[j] = A[q + j];
L[n1 + 1] = INF;
R[n2 + 1] = INF;
for (k = p, i = 1, j = 1; k <= r; k++)
if (L[i] <= R[j])
A[k] = L[i++];
else
A[k] = R[j++];
}
void Merge_Sort(int A[], int p, int r){
int q;
if(p < r){
q = (p + r)/2;
Merge_Sort(A, p, q);
Merge_Sort(A, q + 1, r);
Merge(A, p, q, r);
}
}
int main(){
int i, j, n, A[maxn + 1];
printf("请输入数组个数\n");
scanf("%d", &n);
printf("请输入数组中数据\n");
for (i = 1; i <= n; i++)
scanf("%d", &A[i]);
Merge_Sort(A, 1, n);
for(i = 1; i <=n; i++)
printf("%d ", A[i]);
printf("\n");
return 0;
}
#include <string.h>
#define INF 1<<16
#define maxn 10000
void Merge(int A[], int p, int q, int r){
int n1, n2, i, j, k;
int L[maxn + 1], R[maxn + 1];
n1 = q - p + 1;
n2 = r - q;
for (i = 1; i <= n1; i++)
L[i] = A[p + i - 1];
for (j = 1; j <= n2; j++)
R[j] = A[q + j];
L[n1 + 1] = INF;
R[n2 + 1] = INF;
for (k = p, i = 1, j = 1; k <= r; k++)
if (L[i] <= R[j])
A[k] = L[i++];
else
A[k] = R[j++];
}
void Merge_Sort(int A[], int p, int r){
int q;
if(p < r){
q = (p + r)/2;
Merge_Sort(A, p, q);
Merge_Sort(A, q + 1, r);
Merge(A, p, q, r);
}
}
int main(){
int i, j, n, A[maxn + 1];
printf("请输入数组个数\n");
scanf("%d", &n);
printf("请输入数组中数据\n");
for (i = 1; i <= n; i++)
scanf("%d", &A[i]);
Merge_Sort(A, 1, n);
for(i = 1; i <=n; i++)
printf("%d ", A[i]);
printf("\n");
return 0;
}