传说中的O(n+k)时间复杂度的算法
看动画写的点击打开链接
void Countsort(int *a,int len)
{
int maxx ,minn;
maxx = minn = a[0];
for(int i=0;i<len;i++)
{
if(maxx<a[i])maxx=a[i];
if(minn>a[i])minn=a[i];
}
int Range=maxx-minn+1;
int* c = new int[Range];
int* ta = new int[len+1];
for(int i=0;i<Range;i++)c[i]=0;
for(int i=0;i<len;i++)
c[a[i]-minn]++;
for(int i=0;i<Range-1;i++)
c[i+1]+=c[i];
for(int i=len-1;i>=0;i--)
ta[--c[a[i]-minn]]=a[i];
for(int i=0;i<len;i++)
a[i]=ta[i];
}