计数排序
#include<stdio.h>
void CountingSort(int *arrA,int *arrB,int k,int length)
{
int c[k+1];
memset(c,0,sizeof(c));
int i=1;
for(;i<=length;i++)
{
c[arrA[i]]=c[arrA[i]]+1;
}
i=1;
for(;i<=k;i++)
{
c[i]=c[i-1]+c[i];
}
i=length;
for(;i>=1;i--)
{
arrB[c[arrA[i]]]=arrA[i];
c[arrA[i]]=c[arrA[i]]-1;
}
}
int main()
{
int arrA[]={0,12,44,0,2,3,24,5,23,56,32,45,5,5,0,45,64};
int length=sizeof(arrA)/sizeof(arrA[0])-1;
int max=arrA[1];
int i=1;
for(;i<=length;i++)
{
if(arrA[i]>max)
max=arrA[i];
}
int k=max;
int arrB[length+1];
CountingSort(arrA,arrB,k,length);
i=1;
for(;i<=length;i++)
printf("%d ",arrB[i]);
system("pause");
return 0;
}