CoutingSort
#include <stdio.h> #include <stdlib.h> void CountingSort(int A[], int B[], int k,int n) { int * C; C=(int *)calloc(k,sizeof(int)); for(int i=0;i<n; i++) { C[A[i]]++; } for(i=1; i<k; i++) { C[i]+=C[i-1]; } for(i=n-1; i>=0; --i) { B[C[A[i]]-1]=A[i]; C[A[i]]--; } free(C); } int main() { int A[]={1,3,3,2,9,6,7,8,5,6,4,3,7}; int k=10; int B[13]; CountingSort(A,B,k,13); printf("排序后的数组\n"); for(int i=0;i<13;i++) { printf("%d\t",B[i]); } }
注意:
1.数组初始化
int * p=(int *) calloc(k,size(int)); 会对内存空间初始化为0、
int * p=(int *) malloc(k*size(int));不会对内存空间初始化。
2.注意数组下标