#include<stdio.h>
#include<stdlib.h>
void count_sort(int A[],int B[],int N)
{
/*
**A:原数组
**B:排序后数组
**N:AB数组的长度
*/
/*
**计算原数组中数据的范围,确定count的长度
*/
int max=A[0];
int min=A[0];
int i;
for(i=0;i<N;i++)
{
max=(max>A[i])?max:A[i];
min=(min<A[i])?min:A[i];
}
int length=max-min+1;
/*
**创建并初始化count
*/
int *count=(int *)malloc(sizeof(int)*length);
if(NULL==count)
{
printf("F");
exit(1);
}
for(i=0;i<length;i++)/*错误✖2:没有初始化*/
{
count[i]=0;
}
/*
**计数数组
*/
for(i=0;i<N;i++)
{
count[A[i]-min]++;
}
/*
**累加数组
*/
for(i=1;i<length;i++)/*粗心的错误:i<N*/
{
count[i]=count[i]+count[i-1];
}
/*
**反向填充目标数组
*/
for(i=N-1;i>=0;i--)/*i--*/
{
B[count[A[i]]-1]=A[i];
count[A[i]]--;
}
/*
**释放内存
*/
free(count);
}
int main()
{
int A[40]={1,6,7,5,2,3,4,9,0,5,9,6,3,1,4,8,5,2,0,7,6,4,1,3,2,9,8,7,0,6,4,9,1,3,5,7,8,9,6,7};
int N=40;
int B[40]={0};
count_sort(A,B,N);
int i;
for(i=0;i<N;i++)
{
printf("%d ",B[i]);
}
return 0;
}