博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bsearch函数二分法
阅读量:4568 次
发布时间:2019-06-08

本文共 1282 字,大约阅读时间需要 4 分钟。

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

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

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

今天我们来看看关于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里面也遇到过要用户自己提供比较函数的情况,

参考这篇文章:

 

 

转载于:https://www.cnblogs.com/hanbin/archive/2012/05/28/2521530.html

你可能感兴趣的文章
Redis安装异常解决办法
查看>>
android开发时gen和bin目录的SVN管理(转)
查看>>
Jsonp post 跨域方案
查看>>
30分钟 让你成为一个更好的程序员
查看>>
使用HTML5开发离线应用 - cache manifest
查看>>
深入理解C语言 - 指针使用的常见错误
查看>>
JAVA Excel API学习案例
查看>>
网页打开速度慢的原因及N种解决方法
查看>>
监控线上服务的小脚本
查看>>
ultraedit 实际应用技巧
查看>>
mysql_select 单表查询
查看>>
磁盘配额
查看>>
dns视图搭建
查看>>
WPF 中动态改变控件模板
查看>>
ubuntu Ctrl+Alt+F1 进入终端字符界面 登录出现login incorrect解决办法
查看>>
珍爱生命,远离JS=>JS避坑记
查看>>
Bundle对象实现不同Activity之间数据传递
查看>>
TeamViewer 远程应用不显示,空白解决方案
查看>>
人机交互第五次作业
查看>>
linux下MySQL停止和重启
查看>>