归并排序(源代码)
很久没有做C程序了,今天数据结构试验要做个归并排序,看了看书,花了不少时间终于把它做出来了。
不好意思,没有注释,算法网上都有,就是没有源程序。
#include<stdio.h>
void creatlist(int l[])
{
printf(输入十个数:");
for(int i = 1; i<=10; i++)
scanf("%d",&l[i]);
}

void merge(int sr[], int tr[],int i, int m, int n)
{
for(int j=m+1, k=i; i<=m&&j<=n; ++k)
{
if(sr[i] > sr[j]) tr[k] = sr[i++];
else tr[k] = sr[j++];
}
if(i<= m)
for( ; k<=n; k++)
tr[k]=sr[i++];
if(j<= n)
for( ; k<=n; k++)
tr[k]=sr[j++];
}

void msort(int sr[], int tr1[], int s, int t)
{
if(s == t) tr1[s] = sr[s];
else
{
int m= (s+t)/2;
int tr2[11];
msort(sr,tr2,s,m);
msort(sr,tr2,m+1,t);
merge(tr2,tr1,s,m,t);
}

}


void main()
{
int a[11],b[11];
creatlist(a);
msort(a,b,1,10);
printf(“排序后的结果是:");
for(int i=1;i<=10;i++)
printf("%d ",b[i]);
}
不好意思,没有注释,算法网上都有,就是没有源程序。
#include<stdio.h>
void creatlist(int l[])
{
printf(输入十个数:");
for(int i = 1; i<=10; i++)
scanf("%d",&l[i]);
}
void merge(int sr[], int tr[],int i, int m, int n)
{
for(int j=m+1, k=i; i<=m&&j<=n; ++k)
{
if(sr[i] > sr[j]) tr[k] = sr[i++];
else tr[k] = sr[j++];
}
if(i<= m)
for( ; k<=n; k++)
tr[k]=sr[i++];
if(j<= n)
for( ; k<=n; k++)
tr[k]=sr[j++];
}
void msort(int sr[], int tr1[], int s, int t)
{
if(s == t) tr1[s] = sr[s];
else
{
int m= (s+t)/2;
int tr2[11];
msort(sr,tr2,s,m);
msort(sr,tr2,m+1,t);
merge(tr2,tr1,s,m,t);
}
}

void main()
{
int a[11],b[11];
creatlist(a);
msort(a,b,1,10);printf(“排序后的结果是:");
for(int i=1;i<=10;i++)
printf("%d ",b[i]);
}



浙公网安备 33010602011771号