inlinevoidcountingsort(){memset(c,0,sizeof(c));for(int i =1; i <= n; i++)//统计每个数字出现几次++c[a[i]];for(int i =2; i <= m; i++)//求前缀和
c[i]+= c[i -1];for(int i =1; i <= n; i++)//从后往前填入数字
r[i]= c[a[i]]--;for(int i =1; i <= n; i++)printf("%d", r[i]);}
#include<bits/stdc++.h>usingnamespace std;int n, m, a[100001], sa[100001], v[100001], r[100001],c[10];inlinevoidcountingsort(){memset(c,0,sizeof(c));for(int i =1; i <= n; i++)++c[v[i]];for(int i =1; i <=9; i++)
c[i]+= c[i-1];for(int i = n; i;--i)
r[sa[i]]= c[v[sa[i]]]--//上一次排序中的第i个数在当前关键字下应该排第几位for(int i =1; i <= n; i++)
sa[r[i]]= i;//更新这一次的排序,将原来输入的n个数填入他们应该在的位置}inlinevoidradixsort(){for(int i =1; i <= n; i++)
sa[i]= i;int x =1;for(int i =1; i <= m; i++, x*=10){for(int j =1; j <= n; j++)
v[j]= a[j]/x%10;countingsort();}}