常用二分查表法函数

  • 二分查表法查找效率相较于普通查表法,效率较为高效,常用于嵌入式开发中,如温度采集等。
    本函数基于网上的案例加以整理并实际多次应用验证无误,现贴源码如下并加以注解:

/*
形参说明:
float cData:当前输入索引的数据
float pTab[]:所要索引的表
unsigned char pTab_len:所要索引的表的长度
以上数据类型可依据实际表数据和表长度作更改
返回值:
返回当前输入索引的数据的位置
*/
unsigned char Find_Tab(float cData,float pTab[],unsigned char pTab_len)// 
{
	unsigned char tab_s=0; //索引表的起始位置
	unsigned char tab_e; //索引表的结束位置
	unsigned char tab_c=0; //索引表的当前位置
	unsigned char k=0;

	tab_e=pTab_len-1;//结束位置为表尾【即正常的下行索引方式】
	if(pTab[tab_s]<=cData) 如果当前输入的数据大于当前表头
	{ 
		return tab_s; //则退出,并取表首位置作为函数返回值
	}
	else if(pTab[tab_e]>=cData) 如果当前输入的数据大于当前表尾
	{
	    return tab_e;//则退出,并取表尾位置作为函数返回值
	} 
	for(;tab_s<tab_e;)
	{
		tab_c=(tab_s+tab_e)/2; //取表中间位置为当前位置
		if(pTab[tab_c]==cData) break;//若输入的索引数据正好等于当前表位置数据,则结束索引
		if(pTab[tab_c]>cData&&cData>pTab[tab_c+1]) break; //若当前输入的索引数据在当前表位置临近数据区间内,则结束索引
		if(cData>pTab[tab_c]) tab_e=tab_c;//若输入的索引数据大于当前索引表中位置的数据,则将当前表中的位置赋给表尾
		else tab_s=tab_c;//反之赋给表首
		if(k++>pTab_len) break;//若索引次数超过表长度,亦结束索引
	}
	if(tab_s>tab_e) return 0;//若表首位置大于表尾位置,则退出
	return tab_c;//返回当前输入索引的数据的位置
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值