二分查找算法-精简 稳定
2015-12-28 18:08
253 查看
//************************************* // 函数名称: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 ; }
相关文章推荐
- 安装Oracle时可能碰到的常见问题-1
- FZU 2216 The Longest Straight 二分
- C语言函数用法大全
- Linux C 数据结构——队列
- 找不到库文件: java.lang.UnsatisfiedLinkError: Couldn't load ** from loader dalvik.system
- 备忘_汉字转拼音或转拼音首字母
- android-Ultra-Pull-To-Refresh 源码解析
- 微信支付V3.3.7 Demo源码 C#版(绝对可用版)
- 字符串、数组、字典、结构体
- jQuery学习--jQuery DOM 操作
- iOS判断app是否第一次启动
- cocos2d-x 3.9版本界面只显示一部分解决方案
- 程序员常见面试之 计算机网络 知识点小结
- uva10670
- VIM操作
- BM算法详解
- 关于EL表达式大小写问题
- Android Studio使用心得 - 简单介绍与环境配置
- ABP理论学习之应用服务
- 勒索软件出新招,小心你的隐私和財产安全!