定义一个辅助数组,待排数组中的数每出现一次,则将辅助数组中的数加1
时间复杂度O(n+k)
#include<iostream>
#include<cstring>
using namespace std;
int b[1000001];
void CountSort(int *a,int n)
{
int ans=0;
memset(b,0,sizeof(b));
for(int i=0;i<n;i++)
{
b[a[i]]++;
ans=max(ans,a[i]);
}
int pos=0;
for(int i=1;i<=ans;i++)
{
while(b[i])
{
a[pos++]=i;
b[i]--;
}
}
}
int main()
{
int a[]={2,3,1,5,9,2,4,6,7,5,3,8,7,5,3,12};
int n=sizeof(a)/4;
CountSort(a,n);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}