题目描述
给出N个数,你的任务就是把这n个数从小到大排序
输入
第一行一个整数,N(1<=n<=200000),表示有N个数 接下来有N行,每行一个数
输出
输出N行,表示已经排序的N个数
样例输入
5 2 3 1 4 5
样例输出
1 2 3 4 5
数据范围限制
n<=100000
话不多说,上代码:
#include<cstdio>
using namespace std;
int n,p[2000010];
void bi(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
}
int pa(int l,int r)
{
int i=l,j=r,m;
m=p[(i+j)/2+1];
while(i<=j)
{
while(p[i]<m&&i<=r)
{
i++;
}
while(p[j]>m&&j>=l)
{
j--;
}
if(i<=j)
{
bi(p[i],p[j]);
i++;
j--;
}
}
if(l<j)
{
pa(l,j);
}
if(r>i)
{
pa(i,r);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
pa(1,n);
for(int i=1;i<=n;i++)
{
printf("%d\n",p[i]);
}
}