/* radixsort – wersja A */
#include<stdio.h>
#include<string.h>
const int w=9; /* liczba wierszy */
const int k=4; /* liczba kolumn */
const int s=24; /* rozmiar alfabetu */
void countsort(char [][k],int);
void radixsort(char dane[][k]);
void write(char [][k]);
int main(void) {
char dane[w][k] = {"aba","aaa","bab", "cac","bac","bca", "bab","abb","baa"};
radixsort(dane);
return 0;
}
void write(char dane[w][k]) {
int licz;
printf("\n\n");
for(licz=0;licz<w;licz++) puts(dane[licz]);
}
void countsort(char dane[w][k], int p) { int i,j;
char x;
int count[s]={0};
char temp[w][k-1];
/* zliczanie */
for(i=0;i<w;i++) count[dane[i][p] - 97]++;
for(i=1;i<s;i++) count[i] += count[i-1];
for(i=0;i<s;i++) if(count[i]) count[i]--;
/* porzadkowanie */
for(i=w-1;i>=0;i--) {
x=dane[i][p];
for(j=0;j<k-1;j++)
temp[count[x-97]][j]=dane[i][j];
count[x-97]--;
}
/* przepisywanie */
for(i=0;i<w;i++) for(j=0;j<k-1;j++)
dane[i][j]=temp[i][j];
}
void radixsort(char dane[w][k]) {
write(dane);
for(int i=k-2; i>=0;i--) {
countsort(dane,i);
write(dane);
} }
aba aaa bca baa bab bab abb cac bac
aaa baa bab bab cac bac aba abb bca aba
aaa bab cac bac bca bab abb baa
aaa baa bab bab cac bac aba abb bca
aaa aba abb baa bab bab bac bca cac