Zgryźliwość kojarzy mi się z radością, która źle skończyła.
/* 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);
}
}
aaa
baa
bab
bab
cac
bac
aba
abb
bca
aba
aaa
bca
baa
bab
bab
abb
cac
bac
aba
aaa
bab
cac
bac
bca
bab
abb
baa
aaa
aba
abb
baa
bab
bab
bac
bca
cac
aaa
baa
bab
bab
cac
bac
aba
abb
bca