请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。
输出格式
输出共一行,包含 n 个整数,表示排好序的数列。
数据范围
1≤n≤100000
#include<stdio.h>
#include<stdio.h>
void merge(int num1[],int num2[],int start,int mid,int end )//进行合并成有序的数组
{
int i=start,j=mid+1,k=start;
while(i!=mid+1 && j!=end+1)合并排序,并把数组放入num2中
{
if(num1[i]>num1[j])
num2[k++]=num1[j++];
else
num2[k++]=num1[i++];
}
while(i!=mid+1)
{
num2[k++]=num1[i++];
}
while(j!=end+1)//
{
num2[k++]=num1[j++];
}
for(i=start; i<=end; i++)
num1[i] = num2[i];
}
void mergeSort(int num1[],int num2[],int start,int end)
{
int mid;
if(start<end)
{
mid=start +(end-start)/2;
mergeSort( num1, num2, start, mid);//分组
mergeSort( num1, num2,mid+1, end);
merge(num1,num2,start,mid,end);
}
}
int main()
{
int i,n;
scanf("%d",&n);
int num1[n];
int num2[n];
for(i=0; i<n; i++)
{
scanf("%d", &num1[i]);
}
mergeSort(num1,num2,0,n-1 );
for(i=0; i<n; i++)
printf("%d ", num1[i]);
printf("\n");
return 0;
}