快速排序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
using namespace std;
int n,a[100005];
inline int read(){
int x=0,w=1;char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*w;
}
void qsort(int l,int r){
int i=l,j=r;
int t=(rand()%(r-l+1))+l;
int m=a[t];
do{
while(a[i]<m) i++;
while(a[j]>m) j--;
if(i<=j){
swap(a[i],a[j]);
i++,j--;
}
}while(i<=j);
if(i<r) qsort(i,r);
if(j>l) qsort(l,j);
}
int main(){
srand(time(0));
n=read();
for(int i=1;i<=n;i++) a[i]=read();
qsort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
}
堆排序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[1000005],tot;
inline int read(){
int x=0,w=1;char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*w;
}
inline void up(int num,int max){
int j=num>>1;
while(j){
if(a[j]>a[num]){
swap(a[j],a[num]);
num=j;j=num>>1;
}
else return;
}
}
inline void down(int num,int max){
int j=num<<1;
while(j<=max){
if(a[j]>a[j+1]&&j<max) j++;
if(a[j]<a[num]){
swap(a[j],a[num]);
num=j;j=num<<1;
}
else j=max+1;
}
}
int main(){
int n=read();
for(int i=1;i<=n;i++) {
int x=read();
a[++tot]=x;up(tot,tot);
}
for(int i=tot;i>=2;i--){
swap(a[i],a[1]);
down(1,i-1);
}
for(int i=n;i>=1;i--) printf("%d ",a[i]);
}
归并排序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int a[1000005],r[100005];
inline int read(){
int x=0,w=1;char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*w;
}
void msort(int s,int t){
if(s==t) return;
int m=(s+t)>>1;
msort(s,m);
msort(m+1,t);
int i=s,j=m+1,k=s;
while(i<=m&&j<=t)
if(a[i]<a[j]) r[k++]=a[i++];
else r[k++]=a[j++];
while(i<=m) r[k++]=a[i++];
while(j<=t) r[k++]=a[j++];
for(int i=s;i<=t;i++) a[i]=r[i];
}
int main(){
n=read();
for(int i=1;i<=n;i++) a[i]=read();
msort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
}