#include<iostream>
using namespace std;
void output(int *a,int size);
void count_sort(int *a,int *b,int k,int size)
{
int c[k]={0};
for(int i=0;i<size;++i)
c[a[i]]++;
output(c,k);
for(int i=1;i<k;++i)
c[i]=c[i]+c[i-1];
output(c,k);
for(int i=size-1;i>=0;--i)
{
b[c[a[i]]-1]=a[i];
--c[a[i]];
}
}
void output(int *b,int size)
{
for(int i=0;i<size;++i)
cout<<b[i]<<" ";
cout<<endl;
}
int main()
{
int a[8]={2,5,3,0,2,3,0,3};
int b[8];
count_sort(a,b,6,8);
output(b,8);
return 0;
}
using namespace std;
void output(int *a,int size);
void count_sort(int *a,int *b,int k,int size)
{
int c[k]={0};
for(int i=0;i<size;++i)
c[a[i]]++;
output(c,k);
for(int i=1;i<k;++i)
c[i]=c[i]+c[i-1];
output(c,k);
for(int i=size-1;i>=0;--i)
{
b[c[a[i]]-1]=a[i];
--c[a[i]];
}
}
void output(int *b,int size)
{
for(int i=0;i<size;++i)
cout<<b[i]<<" ";
cout<<endl;
}
int main()
{
int a[8]={2,5,3,0,2,3,0,3};
int b[8];
count_sort(a,b,6,8);
output(b,8);
return 0;
}
时间复杂度:O(n)
计数排序的一个重要性质就是稳定性: 具有相同值得元素在输入数组中的相对位置与在输出数组中的相对位置是一样的. 通常,这种稳定性只有在进行排序的数据还附带有卫星数据事才比较重要.计数排序经常会被用作基数排序的子过程.