题目描述
利用快速排序算法将读入的 N 个数从小到大排序后输出。
输入格式
第 1 行为一个正整数 N,第 2 行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数,数据保证了 ai 不超过 10^9。
输出格式
将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入 #1
5 4 2 4 5 1
输出 #1
1 2 4 4 5
说明/提示
对于 20% 的数据,有 N≤10^3;
对于 100% 的数据,有 N≤10^5。
代码
#include<stdio.h>
const int N=1e5+10;
int n;
int a[N],b[N];
void msort(int l,int r);
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
msort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}
void msort(int l,int r)
{
if(l==r) return ;
int mid=(l+r)>>1,i=l,j=mid+1;
msort(l,mid);
msort(j,r);
for(int k=l;k<=r;k++)
if(j>r||a[i]<=a[j]&&i<=mid) b[k]=a[i++];
else b[k]=a[j++];
for(int k=l;k<=r;k++) a[k]=b[k];
}