/* * koen noens * * toepassing qsort - zie boek blz. 214 * qsort is een standaard functie met prototype * void qsort(void *base,size_t nelem, size_t widt, * int (*fcmp)(const void *, const void *)) * dwz sorteer een array van structures (*base) volgens gegeven functie *fcmp * qsort sorteert adhv de return van de gegeven functie * (gelijk, groter dan, kleiner dan) * */ #include #include // qsort #include // strcmp struct Persoon { char naam[20]; int nummer; }; void print(const Persoon p[]); //om op scherm te zetten int op_naam(const void *a, const void *b); // voor qsort 'op naam' int op_nummer(const void *a, const void *b); // voor qsort 'op nummer' const aantal = 4; void main() { //declareer en initialiseer een array van 'persoon' Persoon personeelsbestand [aantal] = { {"Vermeulen Patric", 1254 }, {"Bosmans Jos", 3665 }, {"Vandenbroeck Griet", 3298 }, {"Alsholm Petra", 1622 } }; // test : laat array zien : print(personeelsbestand); //sorteer op naam en laat zien cout << "sorteer op naam \n"; qsort(personeelsbestand,aantal, sizeof(Persoon), op_naam); print (personeelsbestand); //sorteer op nummer en laat zien cout << "sorteer op nummer \n"; qsort(personeelsbestand,aantal, sizeof(Persoon), op_nummer); print (personeelsbestand); /* qsort argumenten : * array (pointer, beginadres array : *base) * aantal (aantal structs in de array) : nelem (number of elements * sizeof(persoon) : 'breedte' van de structure = width * width en aantal zijn nodig voor qsort om telkens het * beginadres van de volgende structure te vinden * op_nummer : pointer naar de functie die de waarde aflevert aan de hand van * dewelke qsort het ene element voor/na het andere zet */ } void print(const Persoon p[]) { for(int i=0;inaam, p2 -> naam); } int op_nummer(const void *a, const void *b) {// voor qsort 'op nummer' //declareer 2 hulp -pointers naar persoon Persoon *p1, *p2; //cast de void pointers tot pointers naar type Persoon p1 = (Persoon*) a; p2 = (Persoon*) b; // declareer 2 integer variabelen en geef hen de waarde waarnaar de pointers verwijzen int x, y; x = p1 -> nummer; y = p2 -> nummer; // vergelijk met <, > // of door het ene getal van het andere af te trekken // return 0 = gelijk // return + of - n = groter resp. kleiner return x-y; // kan ook : //return p1->nummer - p2->nummer; }