归并排序算法——C语言实现
下面给出完整代码:#include
#define MAXSIZE 32
void MERGE(int A[],int p,int q,int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int L[MAXSIZE];
int R[MAXSIZE];
int i;
int j;
for(i = 0;i < n1;i++)
L[i] = A[p + i];
for(j = 0;j < n2;j++)
R[j] = A[q + 1 + j];
i = 0;
j = 0;
int k = p;
while (i < n1 && j < n2)
if(L[i] < R[j])
A[k++] = L[i++];
else
A[k++] = R[j++];
while(i < n1)
A[k++] = L[i++];
while(j < n2)
A[k++] = R[j++];
for(int m = p; m <= r;m++)
printf("%d\t",A[m]);
printf("\n");
}
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 A[MAXSIZE];
int n;
printf("请输入要排序的元素个数:");
scanf("%d",&n);
printf("请逐个输入要排序的数字:");
for(int i = 0;i < n ;i++)
scanf("%d",&A[i]);
MERGE_SORT(A, 0, n - 1);
return 0;
}