Hej.
Wiem jak używać qsorta dla tablicy jednowymiarowej ale problem zaczął się gdy chciałem posortować poszczególne kolumny tablicy dwuwymiarowej. Przekazywanie jednej kolmuny do funkcji qsort za pomocą *(tab+i) nie działa. Zamieszczam fragment kodu:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define sizex 10
#define sizey 15
char losuj(void);
int my_compare (const void *, const void *);
int main(void)
{
int i,j;
char **tab;
srand(time(NULL));
//alokuje pamiec na tablice wskaznikow do tablic
tab=(char**)malloc(sizex*sizeof(char*));
//alokuje tablice drugiego wymiaru
for(i=0; i<sizex; i++)
*(tab+i)=(char*)malloc(sizey*sizeof(char));
//wypelniam tablice
for(i=0; i<sizex;i++)
{
for(j=0; j<sizey; j++)
{
tab[i][j]=losuj();
printf("%c ", tab[i][j]);
}
puts("\n");
}
//qsortowanie
for(i=0; i<sizex; i++)
qsort(*(tab+i), sizey, sizeof(char), my_compare);
//wypisanie tablicy posrtowanej
puts("SORT");
for(i=0; i<sizex;i++)
{
for(j=0; j<sizey; j++)
{
printf("%c ", tab[i][j]);
}
puts("\n");
}
//dokonuje dealokacji
for(i=0; i<sizex; i++)
free(*(tab+i));
free(tab);
return 0;
}
int my_compare (const void * a, const void * b)
{
const char **ia=(const char **)a;
const char **ib=(const char **)b;
return strcmp(*ia, *ib);
}