#include "stdafx.h"
#include<iostream>
using namespace std;
//是权位数列,B是输出数列,D是原数列,k是范围
void COUNTING_SORT(int A[], int B[],int D[], int k)
{
int C[10];
for (int i = 0; i <= k; i++)
C[i] = 0;
for (int j = 0; j < 10; j++)
C[A[j] - 1] += 1;
for (int i = 1; i <= k; i++)
C[i] = C[i] + C[i - 1];
for (int i = 9; i >= 0; i--)
{
B[C[A[i] - 1] - 1] = D[i];
C[A[i] - 1]--;
}
}
void print(int a[], int k)
{
for (int i = 0; i < k; i++)
cout << a[i]<<" ";
cout << "\n";
}
bool zero(int A[])
{
for (int i = 0; i < 10; i++) {
if (A[i] != 0)
return false;
}
return true;
}
void weigh(int D[], int A[], int WEIGH)
{
for (int j = 0; j < 10; j++) {
A[j] = D[j] ;
}
for (int j = 0; j < 10; j++) {
for (int i = 0; i < WEIGH; i++) {
A[j] = A[j] / 10;
}
}
if (!zero(A)) {
for (int j = 0; j < 10; j++) {
A[j] = A[j] % 10;
}
}
}
void radix(int D[], int B[], int k)
{
int A[10];
int WEIGH=0;
weigh(D, A, WEIGH);
while (!zero(A)) {
COUNTING_SORT(A, B, D, 8);
WEIGH++;
weigh(D, A, WEIGH);
}
}
int main()
{
int D[] = { 4215,2526, 8732,6641, 5264 ,3288,2975, 1282 ,6596 ,7628 };
int A[10];
int B[10];
print(D, 10);
radix(D, B, 8);
print(B, 10);
while (1);
return 0;
}