jeśli mowa o C, to jednym z prostszych rozwiązań (ale powtarzającym niestety sporo kodu) będzie coś takiego:
int my_compare_0(const void * a, const void * b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(ia[0],ib[0]);
}
int my_compare_1(const void * a, const void * b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(ia[1],ib[1]);
}
int my_compare_2(const void * a, const void * b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(ia[2],ib[2]);
}
...
switch(sorting_column)
{
case 0: qsort(tablica, 11, 3*sizeof(int *), my_compare_0);
case 1: qsort(tablica, 11, 3*sizeof(int *), my_compare_1);
case 2: qsort(tablica, 11, 3*sizeof(int *), my_compare_2);
}
w C++ można by się pobawić w szablony by zdefiniować wszystkie funkcje porównujące za jednym zamachem:
template <int column> int my_compare(const void * a, const void * b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(ia[column],ib[column]);
}
...
switch(sorting_column)
{
case 0: qsort(tablica, 11, 3*sizeof(int *), my_compare<0>);
case 1: qsort(tablica, 11, 3*sizeof(int *), my_compare<1>);
case 2: qsort(tablica, 11, 3*sizeof(int *), my_compare<2>);
}