代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 200001
#define VMAX 10000
int main(){
unsigned short *A=0,*B=0;
int C[VMAX+1]={0};
int n,i,j;
printf("%Please input a number:\n");
scanf("%d",&n);
A =(unsigned short *)malloc(sizeof(short)*n+1);
B =(unsigned short *)malloc(sizeof(short)*n+1);
//输入A[n]的值
printf("Please input %d numbers :\n",n );
for( i = 0; i < n; i++ ){
scanf("%hu",&A[i+1]);
C[A[i+1]]++;//在C[i]中记录i的出现次数
}
//修复C[i],在C[i]中记录小于等于i的元素出现的次数
for(j = 1; j <= VMAX ;j++ ){
C[j] = C[j]+C[j-1];
}
//排序
for( j = n ; j >= 1; j-- ){
B[C[A[j]]] = A[j];
C[A[j]]--;
}
printf("The results of CountingSort is:\n");
for( i = 1; i <= n; i++){
if(i>1) printf(" ");
printf("%d",B[i]);
}
printf("\n");
free(A);
free(B);
return 0;
}