原题链接:数据结构-归并排序
解题思路:
详解见1169题
参考代码:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
void input(int *A,int n);
void output(int *A,int n);
void Mesort(int *A,int *B,int left,int right);
void Merge(int *A,int *B,int left,int middle,int right);
void copy(int *A,int *B,int left,int right);
/*--------------------------------------------------------*/
int main()
{
int *A,*B;
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
A=(int *)malloc(n*sizeof(int));
B=(int *)malloc(n*sizeof(int));
input(A,n);
Mesort(A,B,0,n-1);
output(A,n);
free(A);
free(B);
}
return 0;
}
/*--------------------------------------------------------*/
void Mesort(int *A,int *B,int left,int right)
{
if(left<right)
{
int i=(left+right)/2;
Mesort(A,B,left,i);
Mesort(A,B,i+1 ,right);
Merge(A,B,left,i,right);
copy(A,B,left,right);
}
}
/*--------------------------------------------------------*/
void Merge(int *A,int *B,int left,int middle,int right)
{
int i=left,j=middle+1,k=left;
while((i<=middle)&&(j<=right))
{
if(A[i]<=A[j])
B[k++]=A[i++];
else
B[k++]=A[j++];
}
if(i>middle)
for(int q=j;q<=right;q++)
B[k++]=A[q];
else
for(int q=i;q<=middle;q++)
B[k++]=A[q];
}
/*--------------------------------------------------------*/
void copy(int *A,int *B,int left,int right)
{
for(;left<=right;left++)
A[left]=B[left];
}
/*-------------------------*/
void input(int *A,int n)
{
for(int i=0;i<n;i++)
scanf("%d",&A[i]);
}
/*-------------------------*/
void output(int *A,int n)
{
for(int i=0;i<n-1;i++)
printf("%d ",A[i]);
printf("%d\n",A[n-1]);
}别忘点赞哦-.-
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复