找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2443|回复: 4
打印 上一主题 下一主题
收起左侧

二分查表法程序,高效查找数据,温度检测很实用

[复制链接]
跳转到指定楼层
楼主
ID:149876 发表于 2020-11-12 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用最少的运算次数找出数据位置,基础思路。1000个数据,第一次判定是前500还是后500,第二次是前250还是后250.这样1000个数据很快就可以查完。

uint8 FineTab(uint16 *a,uint8 TabLong,uint16 data)//表中数据从大到小  

{  

    uint8 st,ed,m ;  

    uint8 i ;  

  

    st = 0 ;  

    ed = TabLong-1 ;  

    i = 0  ;  

  

    if(data >= a[st]) return st ;  

    else if(data <= a[ed]) return ed ;  

  

    while(st < ed)  

    {  

        m = (st+ed)/2 ;  

  

        if(data == a[m] ) break ;  

        if(data < a[m] && data > a[m+1]) break ;  


        if(data > a[m])  ed = m ;                     

        else st = m ;     

         

        if(i++ > TabLong) break ;  

    }  


    if(st > ed ) return 0 ;   
    return m ;  
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:156220 发表于 2020-11-12 18:31 | 只看该作者
高效解决问题
回复

使用道具 举报

板凳
ID:592807 发表于 2020-11-13 14:23 | 只看该作者
你的代码有很大的局限性,可以参考但不能直接用:首先你这个数据早就按大小顺序排列好了。其次你的2分法如果数据总数是单数怎么处理,也没有明确方法。
回复

使用道具 举报

地板
ID:149876 发表于 2020-11-24 14:09 | 只看该作者
1.这个你在做实际项目时就能体会到用处,特别是非线性传感器,需要数据库修正。
2.这个不分奇数偶数。
回复

使用道具 举报

5#
ID:848290 发表于 2020-11-25 10:43 | 只看该作者
赞,学校师傅让我们做一个温度数据采集检测分析的项目,通过查表方式得到温度,用二分法,能快速提高查表效率

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表