原题链接:数据结构-归并排序
解题思路:
详解见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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复