• 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

  • 相关阅读:
    Net基础篇_学习笔记_第十一天_面向对象(静态与非静态 static)
    Net基础篇_学习笔记_第十一天_面向对象(类)
    Net基础篇_学习笔记_第十一天_面向对象(面向过程与面向对象的区别/类的概念)
    学习笔记_第十天_方法_方法的综合练习---ref练习
    学习笔记_第十天_方法_方法的重载与递归
    学习笔记_第十天_方法_方法的三个高级参数
    学习笔记_第十天_方法_方法的三个高级参数
    MySQL 添加用户、删除用户与授权
    linux composer 安装与应用
    Note1
  • 原文地址:https://www.cnblogs.com/joyclub/p/4481107.html
Copyright © 2020-2023  润新知