#include<stdio.h>
/*第一步,定义合并函数,将两个有序的子列合并成一个有序的列*/
void merge(int r[],int s[],int x1,int x2,int x3) {
int i,j,k;
i=x1;/*指向第一个子列起始点*/
j=x2+1;/*指向第二个子列起始点*/
k=x1;
while((i<=x2)&&(j<=x3))
if(r[i]<=r[j]) {
s[k++]=r[i++];
} else {
s[k++]=r[j++];
}
while(i<=x2)
s[k++]=r[i++];
while(j<=x3)
s[k++]=r[j++];
}
/*第二步,定义归并排序函数*/
void merge_sort(int r[],int s[],int m,int n) {
int p;
int t[10];
if(m==n)
s[m]=r[m];
else {
p=(m+n)/2;
merge_sort(r,t,m,p);/*分割子列*/
merge_sort(r,t,p+1,n);
merge(t,s,m,p,n);/*将递归过程分割的子列有序的逐一合并*/
}
}
int main() {
int a[11];
int i;
printf("请输入十个数:\n");
for(i=1; i<=10; i++)
scanf("%d",&a[i]);
merge_sort(a,a,1,10);
printf("排序后的顺序是:\n");
for(int i=1; i<=10; i++)
printf("%5d",a[i]);
printf("\n");
}
归并排序
最新推荐文章于 2022-11-19 20:58:59 发布