二分查找算法-精简 稳定

来源:互联网 发布:内田真礼 知乎 编辑:程序博客网 时间:2024/06/05 11:15
//*************************************// 函数名称: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 ;}

34 1
原创粉丝点击