#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; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步