//注释处是自己在做快排时想的一些问题.
#include<iostream>
using namespace std;
const int N=100010;
int q[N];
void quick_sort(int q[],int l,int r)
{
if (l>=r) return;
int i=l-1,j=r+1,x = q[l + 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]);
//i>j,这个条件是保证i,j分别在两侧,如果i>j,那会将原本已经分好的再换回去
//记住:在结束一次外层循环时i>j,即i,j已经相遇且分别再次移动一个单位.
}
//递归处理两侧
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main()
{
int n;
scanf("%d",&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;
}
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~