#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

#define N 26

void arrayRandomGenerate(int *aa, int n, int c) {
    int i;
    srand(7);
    for (i = 0; i < n; ++i) {
         aa[i] = rand() % c;
    }
}

void indecesPrint(int n) {
    int i;
    for (i = 0; i < n; ++i) {
         printf("%2d ", i);
    }
    printf("\n");
}

void arrayPrint(int *aaa, int n) {
    int i;
    for (i = 0; i < n; ++i) {
         printf("%2d ", aaa[i]);
    }
    printf("\n");
}

int ordinarAscend(int x, int y) {
    return x < y;
}

int ordinarDescend(int x, int y) {
    return x > y;
}

int impairPairAscend(int x, int y) {
    return (x % 2 > y % 2) || ((x % 2 == y % 2) && (x < y));
}

int impairImpairPairPairAscend(int x, int y) {
    return (x % 2 == y % 2) && (x < y);
}

int indMin(int (* pRRR)(int, int), int *aaaa, int i, int n) {
    int j, ii;
    ii = i;
    for (j = i + 1; j < n; ++j) {
        if (pRRR(aaaa[j], aaaa[ii])) {
            ii = j;
        }
    }
    return ii;
}

void swap(int *bb, int iii, int jjj) {
    int pom;
    pom = bb[iii];
    bb[iii] = bb[jjj];
    bb[jjj] = pom;
}

/**
 * SELECT SORT
 */
void sort(int (* pRR)(int, int), int *b, int n) {
    int i, imin;

    for (i = 0; i < n; ++i) {
        imin = indMin(pRR, b, i, n);
        swap(b, i, imin);
    }
}
 
 
      


int main() {
    int a[N];
    int (* pR)(int, int);
    unsigned char o;

    printf("Ruzne \"sorty\":\na) bezny vzestupne\nb) bezny sestupne\nc) vzestupne licha a za nimi "
           "suda\nd) vzestupne licha na mistech lichych a suda na mistech sudych\nZadej: ");
    scanf("%c", &o);
    if (tolower(o) == 'a') {
        pR = ordinarAscend;
    } else if (tolower(o) == 'b') {
        pR = ordinarDescend;
    } else if (tolower(o) == 'c') {
        pR = impairPairAscend;
    } else if (tolower(o) == 'd') {
        pR = impairImpairPairPairAscend;
    } else {
        printf("Nebyla zadana zadna z nabizenych moznosti.\nProgram konci.\n");
        return 1;
    }
    arrayRandomGenerate(a, N, 100);
    indecesPrint(N);
    arrayPrint(a, N);
    sort(pR, a, N);
    arrayPrint(a, N);
    printf("Program konci.\n");
    return 0;
}
  

Trochu lep¹í verse toho vlevo

int main() {
    int a[N];
    int (* pR[4])(int, int) = {ordinarAscend, ordinarDescend, impairPairAscend, impairImpairPairPairAscend};
    unsigned char o;

    printf("Ruzne \"sorty\":\na) bezny vzestupne\nb) bezny sestupne\nc) vzestupne licha a za nimi "
           "suda\nd) vzestupne licha na mistech lichych a suda na mistech sudych\nZadej: ");
    scanf("%c", &o);

    if ((tolower(o) < 'a') || (tolower(o) > 'd')) {
        printf("Nebyla zadana zadna z nabizenych moznosti.\nProgram konci.\n");
        return 1;
    }
    arrayRandomGenerate(a, N, 100);
    indecesPrint(N);
    arrayPrint(a, N);
    sort(pR[tolower(o)-'a'], a, N);
    arrayPrint(a, N);
    printf("Program konci.\n");
    return 0;
}