#include<iostream>
using namespace std;
int main(){
int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int len=sizeof(a)/sizeof(a[0]);
//1插入排序、2冒泡排序、3快速排序、4选择排序、5堆排序、6归并排序
//1插入排序:进行len-1轮插入排序i从1~len-1;每次新插入的作为哨兵
//用双指针实现,i指向新插入的元素,j指向新插入前的元素
/*int i,j,key;
for(int i=1;i<len;i++){
key=a[i];
j=i-1;
while(j>=0&&a[j]>key){
a[j+1]=a[j];
j--;
}
a[j+1]=key;
} */
//2冒泡排序:两层循环 i从0~len-1 ;j从0~len-i-1
/*int i,j;
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1-i;j++){
if(a[j]>a[j+1]) swap(a[j],a[j+1]);
}
} */
//4选择排序: i从0~len-1,j从i+1~len,每次定义i处最小,
//遍历找到比i小的交换
//
for(int i=0;i<len-1;i++){
int min=i;
for(int j=i+1;j<len;j++){
if(a[j]<a[min]) swap(a[j],a[min]);
}
}
for(int i=0;i<len;i++) cout<<a[i]<<" ";
return 0;
}
//3快速排序
//#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n;
int q[N];
void quick_sort(int q[],int l,int r) {
if(l>=r) return;
//确定分界点 中间值或者随机值
//调区间
//递归处理左右两端
//int x=q[(l+r)/2];
int x=q[l+rand()%(r-l+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() {
scanf("%d",&n);
for(int i=0; i<n; i++) cin>>q[i];
quick_sort(q,0,n-1);
for(int i=0; i<n; i++) cout<<q[i]<<" ";
return 0;
}
//6归并排序
#include<iostream>
using namespace std;
const int N = 1e5+10;
int n;
int q[N],res[N];
void merge_sort(int q[],int l,int r){
if(l>=r) return;
//确定分界点
//递归排序左右
//归并 合二为一
int mid=(l+r)/2;
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
int k=0;
int i=l,j=mid+1;
while(i<=mid&&j<=r){
if(q[i]<=q[j]) res[k++]=q[i++];
else res[k++]=q[j++];
}
while(i<=mid) res[k++]=q[i++];
while(j<=r) res[k++]=q[j++];
for(i=l,j=0;i<=r;i++,j++){
q[i]=res[j];
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) cin>>q[i];
merge_sort(q,0,n-1);
for(int i=0;i<n;i++) cout<<q[i]<<" ";
return 0;
}