二分查找
2014-03-25 16:40
197 查看
int binarySearch(int a[], int startIndex, int endIndex, const int target) { int left = startIndex; int right = endIndex; while(left <= right) { int middle = ((right - left) >> 1) + left; //位运算提高效率,用减法防溢出。 if(a[middle] < target) //对于指令流水,考虑分支预测, left = middle + 1; else if(a[middle] > target) right = middle - 1; else return middle; /* bool flag = (target != a[middle]); if(flag) //分支可预测性增强,查找的最后一次才会预测失败 (a[middle] < target) ? (left = middle + 1) : (right = middle - 1); else return middle; */ } return -1; }
相关文章推荐
- Chariot主题是一款专业自适应Wordpress作品主题
- iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引
- Mysql遇到Too many connections的解决办法
- Hadoop集群部署
- Tomcat的bin目录下的startup.bat和Tomcat7.exe的区别
- Eclipse 配置Tomcat插件方法
- 生成amazon access key
- 【laytout】android fill_parent和match_parent 的区别
- ORA-01144:File size (string blocks) exceeds maximum of string blocks
- com.sun.jersey.api.client框架测试案例
- Less学习笔记
- 用openstack SDK -- pyrax 访问openstack服务例子
- 电梯调度系统
- (转)GNU风格ARM汇编语法指南(非常详细)1
- windwos上创建多线程的方法
- 基于GNU make的开源大型项目多核并行编译框
- hibernate和ibatis区别
- win7自带无损分区且数据不丢失图文教程
- SQL*PLUS的命令行——column命令
- javaWeb jstl的基本库的定义, 迭代循环, 条件判断