bsearch函数二分法

在初学写程序时,特别是刚开始接触数据结构时,基本都是在查找;

各种排序,其实都是在为查找做准备。

=============================

今天我们来看看关于c语言中自带的一个二分法搜索函数bsearch

通过这个函数可以简单的认识到二分法搜索的一些内在的原理,以及发散一点其他搜索方法的东西。

=============================

首先,介绍这个函数

函数原型:

void *bsearch(const void *key, const void *base, size_t *nelem,  
size_t width, int(*fcmp)(const void *, const *)) 

头文件:#include<stdlib.h>
参数介绍:
参数key指向要查找的关键字的指针;
base指向从小到大的次序存放元素的查找表;
nelem指定查找表元素的个数;
width指定查找表中每个元素的字节数;
int(*fcmp)(const void *, const *)为由用户提供的比较函数。
=================================
首先,给出一个简单的比较函数

复制代码
{ 
 
    if(*a<*b) 
 
        return -1; 
 
    else if(*a>*b) 
 
            return 1; 
 
            else 
 
                return 0; 
 
} 
复制代码

然后在main函数中我们只需要将各种参数按照顺序填进函数中调用就可以了。
像这样……

int search[10]={1,3,6,7,10,11,13,19,28,56}   
int a=13,*p,i; 
 p=(int *)bsearch(&a, search,10, sizeof(int),CMP); 

其他的东西就不写了,全写出来就没意思了最后给出二分查找的介绍:

二分法搜索又叫做折半搜索或折半查找。它是一种经典的顺序文件查找算法,要求查找表按关键字有序排列(从小到大或从大到小,bsearch函数要求从小到大排列)。其查找思想是:逐渐缩小查找范围,直至得到查找结果。查找过程为(以从小到大的序列为例):将要查找的元素的关键字k与当前当前查找范围内位于居中的那个元素的关键字进行比较,若匹配,则查找成功,返回该元素的指针即可;否则,若查找元素的关键字k小于当前查找范围内位于居中的那个元素的关键字,则到当前查找范围的前半部分重复上述查找过程,若查找元素的关键字k大于当前查找范围内位于居中的那个元素的关键字,则到当前查找范围的后半部分重复上述查找过程。
最后,函数原型中提到的那个用户提供的比较函数可以稍微关注下,
看到这个函数的时候 我想到了好像以前在js里面也遇到过要用户自己提供比较函数的情况,

参考这篇文章:http://www.cnblogs.com/hanbin/archive/2011/05/25/2056155.html

 

posted @ 2015-05-06 10:15  码农@163  阅读(313)  评论(0编辑  收藏  举报