RT,我同学自己制作了一种排序方法,他说时间复杂度 O(n);代码如下,求Hack(Wa 或 卡成 O(nlogn) or O(n^2) 都行):
#include<cstdio>
#include<climits>
#include<cmath>
#define N 200007
using namespace std;
int n,last[N],next[N],set;
int last1[N],next1[N],em;
unsigned int a[N],e[N],save;
int minn=INT_MAX;
int min(int x,int y)
{
return x>y?y:x;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
minn=min(minn,a[i]);
}
if(minn<0)
set=-minn;
for(int i=1;i<=n;i++) a[i]+=set;
for(int i=1;i<=n;i++)
{
save=a[i]%N;
next[i]=last[save];
last[save]=i;
}
for(int i=N-1;i>=0;i--)
{
for(int j=last[i];j;j=next[j])
{
save=a[j]/N;
e[++em]=a[j];
next1[em]=last1[save];
last1[save]=em;
}
}
for(int i=0;i<N;i++)
for(int j=last1[i];j;j=next1[j])
printf("%u\n",e[j]);
return 0;
}