#include<stdio.h>
//一定要返回划分好的两个段的中间界,所以需要返回值为int
int part(int a[],int left,int right)
{
int p=a[left];
while(left<right)
{
while(left<right&&a[right]>=p)
--right;
a[left]=a[right];
while(left<right&&a[left]<=p)
left++;
a[right]=a[left];
}
a[left]=p;
return left;
}
void qsort(int a[],int left,int right)
{
if(left<right){
int pos=part(a,left,right);
qsort(a,left,pos-1);
qsort(a,pos+1,right);
}
}
int main()
{
int n;
int i,j;
int buf[101];
while(scanf("%d",&n)!=EOF){
for(i=1;i<=n;i++)
{
scanf("%d",&buf[i]);
}
//冒泡排序
/*
for(i=0;i<n;i++){
for (j=0;j<n-1-i;j++){
if (buf[j]>buf[j+1]){
tem=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tem;
}
}
}*/
//插入排序法,设置哨兵,j赋初值
/*
for(i=2;i<=n;i++)
{
if(buf[i]<buf[i-1]){
buf[0]=buf[i];
//j的初值为i-1
for(j=i-1;buf[0]<buf[j];j--){
buf[j+1]=buf[j];
}
buf[j+1]=buf[0];
}
}
*/
//快速排序
qsort(buf,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
//一定要返回划分好的两个段的中间界,所以需要返回值为int
int part(int a[],int left,int right)
{
int p=a[left];
while(left<right)
{
while(left<right&&a[right]>=p)
--right;
a[left]=a[right];
while(left<right&&a[left]<=p)
left++;
a[right]=a[left];
}
a[left]=p;
return left;
}
void qsort(int a[],int left,int right)
{
if(left<right){
int pos=part(a,left,right);
qsort(a,left,pos-1);
qsort(a,pos+1,right);
}
}
int main()
{
int n;
int i,j;
int buf[101];
while(scanf("%d",&n)!=EOF){
for(i=1;i<=n;i++)
{
scanf("%d",&buf[i]);
}
//冒泡排序
/*
for(i=0;i<n;i++){
for (j=0;j<n-1-i;j++){
if (buf[j]>buf[j+1]){
tem=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tem;
}
}
}*/
//插入排序法,设置哨兵,j赋初值
/*
for(i=2;i<=n;i++)
{
if(buf[i]<buf[i-1]){
buf[0]=buf[i];
//j的初值为i-1
for(j=i-1;buf[0]<buf[j];j--){
buf[j+1]=buf[j];
}
buf[j+1]=buf[0];
}
}
*/
//快速排序
qsort(buf,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}