/*
 * intcmp.c
 *
 * Beispielprogramm qsort / bsearch.
 *
 * Autor: H.Drachenfels
 * Erstellt am: 25.4.2024
 */

#include <stdio.h>
#include <stdlib.h> // qsort, bsearch

static int intcmp(const void *p, const void *q);

int main(void)
{
    int a[4] = {40, 20, 10, 30};

    qsort(a, 4, sizeof (int), intcmp); // sortiert a aufsteigend

    int n = 50;
    int *p = (int*) bsearch(&n, a, 4, sizeof (int), intcmp); // sucht 50 in a

    printf("a = [ ");
    for (int i = 0; i < 4; ++i)
    {
        printf("%d ", a[i]);
    }
    printf("]\n");

    printf("&a[0] = %p p = %p\n", (void*) a, (void*) p);

    return 0;
}

/*
 * Vergleichsfunktion fuer qsort und bsearch muss liefern:
 * > 0, wenn der erste Wert groesser ist
 * < 0, wenn der erste Wert kleiner ist
 * 0, wenn beide Werte gleich sind
 */
static int intcmp(const void *p, const void *q)
{
    const int *left = (const int *) p;
    const int *right = (const int *) q;
    if (*left > *right) return 1;
    if (*left < *right) return -1;
    return 0;
}

