Witam, mam problem z wymyśleniem dwóch instrukcji, które będą spełniać funkcje sortowania... Reszta wydaje mi się poprawna.

#include <stdio.h>

#define KLUCZE 4 // ilosc roznych znakow w wyrazach( A + B + C + \0 )

int iloscDanych;
int dlugoscDanych;

void RadixSort(char tab[]);
void CountingSort(char tab[], int indeks);


void RadixSort(char tab[])
{
	int i;
	for(i=dlugoscDanych-1; i>=0; i--)
		CountingSort(tab, i);
}

void CountingSort(char tab[], int indeks)
{	
	int j,i, count[KLUCZE]; 
	char *temp[iloscDanych]; 

	for(i=0; i<KLUCZE; i++) // Zerowanie tablicy przechowujacej wartosci kluczy
		count[i]=0;

	for(i=0; i<iloscDanych; i++) // Zliczanie wartosci kluczy dla danej pozycji
	{	if(tab[i*dlugoscDanych+indeks] == '\0')
			count[0]++;
		count[(int)tab[i*dlugoscDanych+indeks]-64]++;
	}
	for(i=1; i<KLUCZE; i++)
	{				 // Zliczenie sumy wartosci poprzednikow
		count[i] += count[i-1];
	}
	for(i=iloscDanych-1; i>=0; i--) // Sortowanie   - tutaj jest problem
	{
		// tutaj musi znaleźć się coś, czego nie umiem napisać
		
		count[(int)tab[i*dlugoscDanych+indeks]-65]--;
	}	
}

int main()
{
	int i, j, rozmiarDanej;
	scanf("%d\n%d\n", &iloscDanych, &dlugoscDanych);
	char tab[iloscDanych*dlugoscDanych], c;
	for(i=0; i<iloscDanych; i++)
	{	
		j=0, rozmiarDanej=0;
		while((c=getchar()) != '\n')
		{
			tab[i*dlugoscDanych+j]=c;
			rozmiarDanej++;
			j++;
		}
		if(rozmiarDanej<dlugoscDanych)
		{
			while(rozmiarDanej<dlugoscDanych) // nie korzystam z tego jeszcze, ale napisałem już "na zapas"
			{
				tab[i*dlugoscDanych+j]='\0';
				rozmiarDanej++;
				j++;
			}
		}
	}

	RadixSort(tab);
	
	/*for(i=0; i<iloscDanych; i++)
	{
		for(j=0; j<dlugoscDanych; j++)
			printf("%c", tab[i*dlugoscDanych+j]);
		putchar('\n');
	}	
	return 0;*/
}


 

Problem mam z tym, że nie jest to zwykły counting sort. Niestety sortuję tablicę niby dwuwymiarową, choć zapisana jest jako jednowymiarowa ( wyłącznie dla prostoty wysyłania jej do funkcji ). Chodzi z tym wskaźnikiem o to, aby zmieniając ( albo sortując ) pozycje znaków najbardziej wysunięte na prawą stronę zamieniały się też ich poprzednie znaki. Przyjmujac, że w przypadku napisu ABC nasz [0] = 'A', [1] = 'B', [2] = 'C', sortując element [2] i przestawiając go gdzieś, powinien on ze sobą pociągnąć elementy 0 i 1.
Stąd ten wskaźnik, który powinien spełniać tego rolę. Niestety jest to dla mnie taki mindfuck, że nie jestem w stanie tego napisać nawet rozpisując sobie dokładnie wszystko na kartce. Próbowałem zamiast wskaźnika stosować drugą tablicę, taką pomocniczą i potem zapisywać jej wartości do tej oryginalnej, już po całym sortowaniu ( chcę obejść się bez zwracania tablicy, sortowanie ma być procedurą ). Niestety nie wyszło mi to, poza tym dość skomplikowany do napisania jest warunek ciągnięcia za sobą pozostałych elementów tablicy. Czy ktoś mógłby mi z tym pomóc? Sorry jeżeli coś niewyraźnie tłumaczę, no ale nawet napisanie o tym problemie sprawia mi kłopot. ;P Jakbym chociaż mógł w internecie znaleźć jakieś rozwiązanie takiego sortowania dwuwymiarowej tablicy, to miałbym jakiś punkt odniesienia, a tu pustki...
Jeżeli wysyłam dane np:
6
3
ABC
AAA
BAA
ABA
CCA
AAC

To oczekuję wyniku:
AAA
AAC
ABA
ABC
BAA
CCA