计数排序

#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; }
原文地址:https://www.cnblogs.com/angury/p/13033423.html