时间复杂度 时间复杂度

最好:O(nlogn)最好:O(nlogn)

最差:O(nlogn)最差:O(nlogn)

平均:O(nlogn)平均:O(nlogn)

空间复杂度空间复杂度

非原地排序:O(n)非原地排序:O(n)

算法稳定性:稳定算法稳定性:稳定

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
constexpr int N=1e5+7;
int n,a[N];
int get(int t,int w){
	int tmp=t/pow(10,w);
	return tmp%10;
}
void so(int w){
	int maxx=0,pre[N]={},ans[N]={};
	for(int i=1;i<=n;i++){
		maxx=max(get(a[i],w),maxx);
		pre[get(a[i],w)]++;
	}
	for(int i=1;i<=maxx;i++) pre[i]+=pre[i-1];
	for(int i=n;i>=1;i--){
		ans[pre[get(a[i],w)]--]=a[i];
	}
	for(int i=1;i<=n;i++){
		a[i]=ans[i];
	}
}
void Sort(){
	int maxx=0;
	for(int i=1;i<=n;i++) maxx=max(maxx,a[i]);
	maxx*=10;
	for(int i=0;maxx>=pow(10,i);i++){
		so(i);
	}
}
signed main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	Sort();
	for(int i=1;i<=n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}