#include #include // static bei Hilfsfunktionen nicht vergessen! // Der Code ist wie in den Folien: diese Funktion bekommt Pointer auf die zu // sortierenden Elemente, und erwartet einen Rueckgabewert, der die // Sortierreihenfolge angibt. Siehe auch die Manpage von qsort(3). static int cmp(const void *a, const void *b) { const int *x = a; const int *y = b; if (*x < *y) { return -1; } else if (*x == *y) { return 0; } else { return +1; } } int main() { const int len = 8; // Nicht optimal; siehe Kommentar unten. int numbers[] = { 5, 3, 11, 1, 5, 7, -5, 3 }; // "Zufaellige" Zahlen. ;) // Anstatt "len" kann man hier auch "sizeof(numbers) / sizeof(int)" // verwenden, um die Anzahl an Elementen im Array zu bestimmen. Das // funktioniert aber nur, da "numbers" hier wirklich ein "int []" ist - mit // einem "int *" ginge das nicht! // Anstatt "sizeof(int)" kann man auch z.B. "sizeof(*numbers)" schreiben; // das hat (theoretisch) den Vorteil, dass man leichter den Typ des Arrays // aendern kann (z.B. zu "long"). qsort(numbers, len, sizeof(int), cmp); for (int i = 0; i < len; i++) { // Die Ausgabe zaehlt hier als Grundfunktionalitaet des Programms, und // muss daher fehlerbehandelt werden. if (printf("%d ", numbers[i]) < 0) { perror("printf"); exit(EXIT_FAILURE); } } // Wichtig, da printf(3) die Ausgabe buffern kann, und dann ein potentieller // Fehler erst beim fflush(3) auftreten koennte. Simulieren kann man diesen // Fehler, indem man die Ausgabe dieses Programms umleitet: "./isort > // /dev/full". Da die Datei "/dev/full" immer "voll" ist, schlaegt das // Schreiben dorthin auch immer fehl. if (fflush(stdout) == EOF) { perror("fflush"); exit(EXIT_FAILURE); } }