#include #include #include //http://freshsources.com/HTML/11.04/ALLISON/ALLISON.HTM typedef struct { double hmotnost; char *jmeno; } PACIENT; int sort_up_int(const void *p_a, const void *p_b) { return (*(int *) p_a) - (*(int *) p_b); } int sort_down_p_int(const void *p_a, const void *p_b) { return (**(int **) p_b) - (**(int **) p_a); } int sort_pacient_jmeno(const void *p_a, const void *p_b) { return strcmp(((PACIENT *) p_a)->jmeno, ((PACIENT *) p_b)->jmeno); } int sort_p_pacient_hmotnost(const void *p_a, const void *p_b) { if ((*(PACIENT **) p_a)->hmotnost < (*(PACIENT **) p_b)->hmotnost) return -1; else if ((*(PACIENT **) p_a)->hmotnost == (*(PACIENT **) p_b)->hmotnost) return 0; else return +1; } int main() { int i; int pole_int[] = {3, 1, 2}, **pole_p_int; int num_items_int = sizeof(pole_int) / sizeof(pole_int[0]); PACIENT pole_pacientu[] = { {2.3, "karel"}, {4.8, "lucie"}, {1.5, "anna"} }, **pole_p_pacient; int num_items_pacient = sizeof(pole_pacientu) / sizeof(pole_pacientu[0]); if ((pole_p_int = (int **) malloc(num_items_int * sizeof(&pole_int[0]))) == NULL) { printf("Malo pameti!\n"); return 1; } for (i = 0; i < num_items_int; i++) { pole_p_int[i] = &pole_int[i]; } qsort((void *) pole_p_int, num_items_int, sizeof(int *), sort_down_p_int); for (i = 0; i < num_items_int; i++) { printf("%d ", *pole_p_int[i]); } printf("\n"); for (i = 0; i < num_items_int; i++) { printf("%d ", pole_int[i]); } printf("\n"); qsort((void *) pole_int, num_items_int, sizeof(int), sort_up_int); for (i = 0; i < num_items_int; i++) { printf("%d ", pole_int[i]); } printf("\n"); if ((pole_p_pacient = (PACIENT **) malloc(num_items_pacient * sizeof(&pole_pacientu[0]))) == NULL) { printf("Malo pameti!\n"); return 1; } for (i = 0; i < num_items_pacient; i++) { pole_p_pacient[i] = &pole_pacientu[i]; } qsort((void *) pole_p_pacient, num_items_pacient, sizeof(PACIENT *), sort_p_pacient_hmotnost); for (i = 0; i < num_items_pacient; i++) { printf("%f %s\n", pole_p_pacient[i]->hmotnost, pole_p_pacient[i]->jmeno); } printf("\n"); for (i = 0; i < num_items_pacient; i++) { printf("%f %s\n", pole_pacientu[i].hmotnost, pole_pacientu[i].jmeno); } printf("\n"); qsort((void *) pole_pacientu, num_items_pacient, sizeof(PACIENT), sort_pacient_jmeno); for (i = 0; i < num_items_pacient; i++) { printf("%f %s\n", pole_pacientu[i].hmotnost, pole_pacientu[i].jmeno); } printf("Hello world!\n"); return 0; }