scusami ma il caldo mi causa la comprensione lenta e non riesco a seguire il tuo codice, io la scriverei così

codice:
#include <stdio.h>

void quickSort( char *[], int, int);
int partition( char *[], int, int);


int main() 
{

	char * s[] = { "r", "t", "q", "a", "d", "w", "b", "z", "c"};

	int i;
	printf("\nArray non ordinata :  ");
	for(i = 0; i < 9; ++i)
		printf(" %s ", s[i]);
	printf("\n");

	quickSort( s, 0, 8);

	printf("\nArray ordinata :  ");
	for(i = 0; i < 9; ++i)
		printf(" %s ", s[i]);
	printf("\n");

}



void quickSort( char *a[], int l, int r)
{

   int j;

   if( l < r ) {
        j = partition( a, l, r);
       quickSort( a, l, j-1);
       quickSort( a, j+1, r);
   }
	
}



int partition( char * a[], int l, int r)
{

   char * pivot;
   char * t;	
   int i, j;

   pivot = a[l];
   i = l; j = r+1;
		
   while( 1) {

   	do ++i; while( (strcmp(a[i], pivot) <= 0) && i <= r );
   	do --j; while  (strcmp(a[j], pivot) > 0) ;
   	if( i >= j ) break;
   	t = a[i]; a[i] = a[j]; a[j] = t;

   }

   t = a[l]; a[l] = a[j]; a[j] = t;
   return j;
}
ciao
sergio