#include <stdio.h>

char *bsearch(key,base,nel,w,compar)       /* Binaeres Suchen */
char *key;                    /* Zeiger auf gesuchtes Element */
char *base;           /* Zeiger auf erstes Element des Feldes */ 
int nel;                               /* Anzahl der Elemente */
int w;                               /* Elementlaenge in Byte */ 
int (*compar)();             /* Zeiger auf Vergleichsfunktion */
{
    int mid,i;

    if (nel<=0) return(NULL);
    mid=nel/2;
    if ((i=(*compar)(key,&base[mid*w]))==0)
       return(&base[mid*w]);
    if (i<0)
       return(bsearch(key,base,mid-1,w,compar));
    else
       return(bsearch(key,&base[(mid+1)*w],nel-mid-1,w,compar));
}

int ccomp(pa,pb)                
char *pa,*pb;                      /* beliebige Typen moeglich */
{
    return(*pa-*pb);             /* Vergleich von *pa mit *pb */
}

main()
{
    char c,*bsearch(),*p;

    c='F';
    p=bsearch(&c,"ABCDEFGHI",10,sizeof(char),ccomp);
    printf("p= %c\n",*p);
}
