#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#define SIZE 43000
void splitNumOnDigits(int input[],int output[][5]);
void joinDigitsOnNum(int input[][5],int output[]);
void drawNum(int output[]);
void countingSort(int input[][5],int output[][5],int col);
void addUp(int input[][5],int output[],int col);
void fillZero(int arr[]);
void radixSort(int start[]);
void copyDigits(int input[][5],int output[][5],int rowA, int rowB);
void main()
{
int arr1[SIZE],arr2[SIZE],i;
clock_t c1,c2;
drawNum(arr1);
radixSort(arr1);
for(i=0;i<SIZE;i++)
}
void radixSort(int start[])
{
int auxArr1[SIZE][5],auxArr2[SIZE][5],i,j;
int (*p)[5],(*q)[5],(*r)[5];
p=auxArr1;q=auxArr2;
splitNumOnDigits(start,auxArr1);
for(i=0;i<=5;i++){
countingSort(p,q,i);
r=p;
p=q;
q=r;
}
p=q;q=p;
joinDigitsOnNum(p,start);
}
void countingSort(int input[][5],int output[][5],int col)
{
int addUpArr[10],i;
fillZero(addUpArr);
addUp(input,addUpArr,col);
for(i=SIZE-1;i>=0;i--){
copyDigits(input,output,addUpArr[input[i][col]]-1,i);
addUpArr[input[i][col]]--;
}
}
void addUp(int input[][5],int output[],int col)
{
int i;
for(i=0;i<SIZE;i++){
output[input[i][col]]+=1;
}
for(i=1;i<10;i++){
output[i]+=output[i-1];
}
}
void copyDigits(int input[][5],int output[][5],int rowA, int rowB)
{
int i;
for(i=0;i<5;i++)
output[rowA][i]=input[rowB][i];
}
void joinDigitsOnNum(int input[][5],int output[])
{
int i,j;
float aux;
for(i=0;i<SIZE;i++){
output[i]=0;
for(j=0;j<5;j++){
aux
= input
[i
][j
]*pow(10,j
);
output[i]+=aux;
}
j=0;
}
}
void splitNumOnDigits(int input[],int output[][5])
{
int i,j,aux;
for(i=0;i<SIZE;i++){
for(j=0;j<5;j++){
aux=input[i]%10;
input[i]-=aux;
output[i][j]=aux;
input[i]=input[i]/10;
}
j=0;
}
}
void drawNum(int output[])
{
int i;
for(i=0;i<SIZE;i++)
}
void fillZero(int arr[])
{
int i;
for(i=0;i<10;i++)
arr[i]=0;
}