1 /* 2 * qsort.c 3 * 4 * Liest ganze Zahlen ein und sortiert sie mit qsort. 5 * (siehe zum Vergleich bubblesort.c) 6 * 7 * Autor: H.Drachenfels 8 * Erstellt am: 2.11.2020 9 */
10
11 #include <stdio.h>
12 #include <stdlib.h> // qsort
13
14 int intcmp(const void *p, const void *q);
15
16 int main(void)
17 {
18 //---------------------------------------------- Arraygroesse einlesen
19 printf("Anzahl zu sortierender Werte eingeben:\n");
20 int int_array_size;
21 if (scanf("%d", &int_array_size) != 1)
22 {
23 fprintf(stderr, "Eingabefehler!\n");
24 return 1;
25 }
26
27 //---------------------------------------------------- Zahlen einlesen
28 int *int_array = malloc(sizeof (int) * int_array_size);
29 printf("%d ganze Zahlen eingeben:\n", int_array_size);
30
31 for (int i = 0; i < int_array_size; ++i)
32 {
33 if (scanf("%d", &int_array[i]) != 1)
34 {
35 fprintf(stderr, "Eingabefehler!\n");
36 return 1;
37 }
38 }
39
40 //--------------------------------------------------- Zahlen sortieren
41 qsort(int_array, int_array_size, sizeof (int), intcmp);
42
43 //---------------------------------------------------- Zahlen ausgeben
44 printf("Sortierte Zahlenfolge:\n");
45
46 for (int i = 0; i < int_array_size; ++i)
47 {
48 printf("%d ", int_array[i]);
49 }
50
51 printf("\n");
52
53 //---------------------------------------------------- Array freigeben
54 free(int_array);
55
56 return 0;
57 }
58
59 /* 60 * intcmp 61 * 62 * Vergleichsfunktion fuer qsort muss liefern: 63 * > 0, wenn der erste Wert groesser ist 64 * < 0, wenn der erste Wert kleiner ist 65 * 0, wenn beide Werte gleich sind 66 */
67 int intcmp(const void *p, const void *q)
68 {
69 const int *left = (const int *) p;
70 const int *right = (const int *) q;
71
72 if (*left > *right) return 1;
73 if (*left < *right) return -1;
74 return 0;
75 }
76