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: 15.5.2024 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 if (int_array == NULL)
30 {
31 fprintf(stderr, "Speicherallokierungsfehler!\n");
32 return 1;
33 }
34
35 printf("%d ganze Zahlen eingeben:\n", int_array_size);
36 for (int i = 0; i < int_array_size; ++i)
37 {
38 if (scanf("%d", &int_array[i]) != 1)
39 {
40 fprintf(stderr, "Eingabefehler!\n");
41 return 1;
42 }
43 }
44
45 //--------------------------------------------------- Zahlen sortieren
46 qsort(int_array, int_array_size, sizeof (int), intcmp);
47
48 //---------------------------------------------------- Zahlen ausgeben
49 printf("Sortierte Zahlenfolge:\n");
50 for (int i = 0; i < int_array_size; ++i)
51 {
52 printf("%d ", int_array[i]);
53 }
54
55 printf("\n");
56
57 //---------------------------------------------------- Array freigeben
58 free(int_array);
59 return 0;
60 }
61
62 /* 63 * intcmp 64 * 65 * Vergleichsfunktion fuer qsort muss liefern: 66 * > 0, wenn der erste Wert groesser ist 67 * < 0, wenn der erste Wert kleiner ist 68 * 0, wenn beide Werte gleich sind 69 */
70 int intcmp(const void *p, const void *q)
71 {
72 const int *left = (const int *) p;
73 const int *right = (const int *) q;
74 if (*left > *right) return 1;
75 if (*left < *right) return -1;
76 return 0;
77 }
78