码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找算法

时间:2014-06-25 10:24:52      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:二分查找   算法   查表   验证过   

//*************************************
// 函数名称:FineTab  二分查找算法 ->查温度表
// 函数功能:查找数据在表中对应的位置 表中数据从大到小
// 入口参数:表地址、表长度、要查找的数据
// 出口参数:无
// 返 回 值:数据在表中的位置
//***************************************/

int FineTab(int *a,int TabLong,int data)//查表数据为从大到小排序
{
		int st,ed,m ;
		int 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)>>1 ;//二分取要查询的中间值
	
			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 ;
}
//*************************************
// 函数名称:FineTab  二分查找算法 ->查温度表
// 函数功能:查找数据在表中对应的位置 表中数据从小到大排序
// 入口参数:表地址、表长度、要查找的数据
// 出口参数:无
// 返 回 值:数据在表中的位置
//***************************************/


int Fine1Tab(int *a,int TabLong,int data)
{
		int st,ed,m ;
		int i ;
	
		st = 0 ;//初始化要查询的数为第一个
		ed = TabLong-1 ;//最后一个数
		i = 0  ;
	
		if(data <= a[st]) return st ;//小于等于第一个数 ,查询值为0,即为第一个数
		else if(data >= a[ed]) return ed ;//大于等于最后一个数,查询之为最后一个数
	
		while(st < ed)//循环查询
		{
	    	m = (st+ed)>>1 ;//二分取要查询的中间值
			if(data == a[m] ) break ;//刚好是要查询的值,结束查询
			if(data > a[m-1] && data < a[m]) break ;//data介于中间值和中间值的上个值之间,结束查询
			if(data < a[m])	ed = m ;//data小于当前中间值,更新最后的范围值					
			else st = m ;	//data大于当前中间值,更新开始的范围值	
			
			if(++i > TabLong) //防止溢出
				break ;
		}
	
		if(st > ed ) return 0 ;	
		return m ;
}

二分查找算法,布布扣,bubuko.com

二分查找算法

标签:二分查找   算法   查表   验证过   

原文地址:http://blog.csdn.net/chuangwu2009/article/details/34409373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!