//必须要从后往前排,这样才具有稳定性。
#include<stdio.h>
#include<stdlib.h>
#define MAX 2000001
#define VMAX 10000
int C[VMAX+ 1];
int n;
void CountingSort(unsigned short A[],unsigned short B[], int k) {
for ( int i = 0; i <= k; i++) {
C[i] = 0;
}
for( int j = 1; j <= n; j++) {
C[A[j]]++;
}
for ( int i = 1; i <= k; i++) {
C[i] += C[i-1];
}
for ( int i = n; i >= 1; i--) {
B[C[A[i]]--] = A[i];
}
}
int main() {
unsigned short *A,*B;
int i, j;
scanf("%d", &n);
A = (unsigned short*)malloc(sizeof(short) * n + 1);
B = (unsigned short*)malloc(sizeof(short) * n + 1);
for ( i = 0; i <= VMAX; i++ ) C[i] = 0;
for ( i = 0; i < n; i++ ) {
scanf("%hu", &A[i + 1]);
}
CountingSort(A,B,VMAX);
for ( i = 1; i <= n; i++ ) {
if( i > 1) printf(" ");
printf("%d",B[i]);
}
printf("\n");
}
//必须要从后往前排,这样才具有稳定性。#include<stdio.h>#include<stdlib.h>#define MAX 2000001#define VMAX 10000int C[VMAX+ 1];int n;void CountingSort(unsigned short A[],unsigned short B[], int k) { for ( int i = 0; i <= k; i++) { C[i] = 0;.