//快速排序的思想就是分治
// l----------x--------------r
//① 确定分界点 ;q[l] , q[l+r/2], q[r],随机
//② 调整区间 1--------<=x-----x------>=x---------1
//首先将 ij的偏移量放在两侧的超出一个距离
//时间复杂度为 nlog2(n)
//快速排序的模版
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N = 100010;
int q[N],n;
//与碓冰排序不同的是,快速排序是先进行交换,然后再进行区间的划分
//进行分别的运算。
void quick_sort(int q[],int l,int r){
if(l>=r) return;
int x= q[l+r>>1];//这里选择的是标兵
//这里的标兵的选择也是影响时间复杂度的因素
int i=l-1,j=r+1;
//这也是双指针算法
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&q[i]);
}
quick_sort(q,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",q[i]);
return 0;
}