提交时间:2024-04-23 20:32:28

运行 ID: 46050

#include<bits/stdc++.h> using namespace std; int a[100010]={}; int b[100010]={},c[100010]={},d[100010]={}; void fsort(int l,int r) { if(l==r||a[l]==a[r])return; int m=(l+r+1)/2; b[100010]={}; c[100010]={}; d[100010]={}; int bi=0,ci=0,di=0; for(int i=l;i<=r;i++) { if(a[i]<a[m]) { bi++; b[bi]=a[i]; }else if(a[i]==a[m]) { ci++; c[ci]=a[i]; }else if(a[i]>a[m]) { di++; d[di]=a[i]; } } for(int i=l;i<=l+bi-1;i++) { a[i]=b[i-l+1]; } for(int i=l+bi;i<=l+bi+ci-1;i++) { a[i]=c[i-l-bi+1]; } for(int i=l+bi+ci;i<=r;i++) { a[i]=d[i-l-bi-ci+1]; } if(bi==0&&di==0)return ; fsort(l,l+bi-1); fsort(l+ci+bi,r); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } fsort(1,n); for(int i=1;i<=n;i++) { printf("%lld ",a[i]); } return 0; }