手写归并排序+判定
#include<bits/stdc++.h>
using namespace std;
int s[30],q[30];
int n,i;
bool pd(int x,int y){
int wx=1,wy=1;
int i=x,j=y;
int g,h;
while(i!=0) wx*=10,i/=10;
while(j!=0) wy*=10,j/=10;
int qian=x/wx;
while(x!=0&&y!=0){
g=x/wx,h=y/wy;
wx%=10;wy%=10;
if(g>h) return 1;
else if(g<h) return 0;
}
if(x!=0)
if(g>qian)return 1;
else return 0;
else
if(h>qian) return 0;
else return 1;
}
void gb(int t,int w){
if(t==w) return ;
int mid=(t+w)/2;
gb(t,mid);
gb(mid+1,w);
int z1=t,z2=mid+1,z3=t-1;
while(z1!=mid&&z2!=w){
if(pd(z1,z2)) z3++,q[z3]=s[z1],z1++;
else z3++,q[z3]=s[z2],z2++;
}
while(z1!=mid) z3++,q[z3]=s[z1],z1++;
while(z2!=w) z3++,q[z3]=s[z2],z2++;
for(i=t;i<=w;i++) s[i]=q[i];
return ;
}
signed main(){
cin>>n;
for(i=1;i<=n;i++) cin>>s[i];
gb(1,n);
for(i=1;i<=n;i++) cout<<s[i];
}