import java.util.Scanner;
import java.util.Random;
public class 快速排序随机数 {
static int n;
static int max=100;
static int[] a=new int[max];
static int RandomizedPartition(int[] a,int left,int right){//随机数产生哨兵
Random r=new Random();
int i=r.nextInt(right+1);//这里要注意随机数应大于等于left小于等于right,随机函数知识
while(i<left)
i=r.nextInt(right+1);
int tt=a[i];
a[i]=a[left];
a[left]=tt;//随机到哨兵,将哨兵提到队伍的头部
return Partition(a,left,right);//对数组区间排序,参考快速排序正常版
}
static void RandomizedQuickSort(int[] a,int left,int right){
if(left<right){
int mid=RandomizedPartition(a,left,right);
RandomizedQuickSort(a,left,mid-1);
RandomizedQuickSort(a,mid+1,right);
}
}
static int Partition(int[] a,int left,int right){
int i=left,j=right+1,temp=a[left];
while(true){
while(a[++i]<temp&&i<right);
while(a[--j]>temp);
if(i>=j)
break;
int tt=a[i];
a[i]=a[j];
a[j]=tt;
}
a[left]=a[j];
a[j]=temp;
return j;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=1;i<=n;i++)
a[i]=sc.nextInt();
RandomizedQuickSort(a,1,n);
for(int i=1;i<=n;i++)
System.out.print(a[i]+" ");
}
}