Description
用函数实现归并排序(非递归算法),并输出每趟排序的结果
输入格式
第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据
输出格式
每行输出每趟排序的结果,数据之间用一个空格分隔
输入样例
10 5 4 8 0 9 3 2 6 7 1
输出样例
4 5 0 8 3 9 2 6 1 7 0 4 5 8 2 3 6 9 1 7 0 2 3 4 5 6 8 9 1 7 0 1 2 3 4 5 6 7 8 9
#include <stdio.h>
#include <stdlib.h>
void MergeSort(int a[],int n)
{
int d=1;
while(d<=n)
{
for(int beginn=1; beginn<=n; beginn=beginn+2*d)
{
int b[n],m=1,i,j;
for( i=beginn,j=beginn+d; i<beginn+d&&j<beginn+2*d&&i<=n&&j<=n;)
{
if(a[i]<a[j])
b[m++]=a[i++];
else
b[m++]=a[j++];
}
while(i<beginn+d&&i<=n) b[m++]=a[i++];
while(j<beginn+2*d&&j<=n) b[m++]=a[j++];
for(i=beginn,j=1; i<beginn+2*d&&j<=2*d&&i<=n&&j<=n;)
a[i++]=b[j++];
}
for(int i=1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
d=d*2;
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n+1];
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
MergeSort(a,n);
return 0;
}
自我测试没问题,oj过不了