bsearch()实现二分查找

     C语言中可以用bsearch()实现二分查找。同qsort()一样,bsearch()也包含在<stdlib.h>库中,且同样要

自定义比较子函数。其原型如下:

void   * bsearch( const   void   * key,  const   void   * base , size_t nmem, size_t size,  int  ( * comp)( const   void   * const   void   * ));

     key指向所要查找的元素,base指向进行查找的数组,nmem为查找长度,一般为数组长度,size为每个元素所

占的字节数,一般用sizeof(...)表示,comp指向比较子函数,它定义比较的规则。需要注意的是,数据必须是经过

预先排序的,而排序的规则要和comp所指向比较子函数的规则相同。如果查找成功则返回数组中匹配元素的地址,

反之则返回空。对于有多于一个的元素匹配成功的情况,bsearch()未定义返回哪一个。

     

#include  < stdio.h >
#include 
< stdlib.h >

#define  NUM 8

int  compare( const   void   * p,  const   void   * q)
{
    
return (*(int *)p - *(int *)q);
}


int  main( int  argc,  char   * argv[])
{
    
int array[NUM] = {92711387346};
    
int key = 3;
    
int *p;

    
    qsort(array, NUM, 
sizeof(int), compare);
    p 
= (int *)bsearch(&key, array, NUM, sizeof(int), compare);

    (p 
== NULL) ? puts("not found") : puts("found");

    
return 0;
}

 

 

你可能感兴趣的:(search)