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>
void Merge(int a[],int b[],int low,int mid,int high)
{
int i = low,j = mid,k = 0;
while(i < mid&&j<high)
{
if(a[i]>a[j])
b[k++] = a[j++];
else
b[k++] = a[i++];
}
while(i<mid)
b[k++] = a[i++];
while(j<high)
b[k++] = a[j++];
for(i = 0;i < k;i++)
{
a[low++] = b[i];
}
return;
}
main()
{
int i,j,k,n;
int low,high,mid;
scanf("%d",&n);
int a[n],b[n];
for(i = 0; i <n; i++)
{
scanf("%d",&a[i]);
}
for(i = 1; i < n; i *= 2)
{
for(j = 0; j < n; j = j+2*i)
{
low = j;
mid = (j+i)>n?n:(j+i);
high = (j+2*i)>n?n:(j+2*i);
Merge(a,b,low,mid,high);
}
for(j = 0; j <n; j++)
{
printf("%d ",a[j]);
}
printf("\n");
}
}