int radix_count_sort(int *A, int *d, int n){ //inner: count-sort
int temp[n];
int k = 10;
int Counter[k];
int i = 0, j = 0;
for(i = 0; i < k; i++)
Counter[i] = 0;
for(i = 0; i < n; i++){
j = d[i];
Counter[j] = Counter[j]+1;
}
for(i = 1; i < k; i++)
Counter[i] = Counter[i] + Counter[i-1];
for(i = n-1; i >= 0; i--){ //stable, count in reverse-way
temp[ Counter[d[i]] - 1 ] = A[i];
Counter[d[i]] = Counter[d[i]]-1;
}
for(i = 0; i < n; i++)
A[i] = temp[i];
return 0;
}
int radix_sort(int *A, int n){ //radix = 10
int d1[n],d2[n],d3[n];
for(int i = 0; i < n; i++) //低位起排
d1[i] = A[i]%10;
radix_count_sort(A, d1, n);
for(int i = 0; i < n; i++)
d2[i] = (A[i]/10)%10;
radix_count_sort(A, d2, n);
for(int i = 0; i < n; i++) //最后排高位
d3[i] = A[i]/100;
radix_count_sort(A, d3, n);
for(int i = 0; i < n; i++) //输出排好序列
cout<<A[i]<<endl;
return 0;
}
int test(void){
int A[] = {14,115,329,122,716,491,210,114,861,277};
int n = sizeof(A)/ sizeof(int);
radix_sort(A, n);
return 0;
}
结果: