二分查找算法
来源:互联网 发布:如何自学数控编程3个月 编辑:程序博客网 时间:2024/05/20 04:26
二分查找法
By qianghaohao(Xqiang)
二分查找虽然简单,但是写的时候需要特别注意一下,
那就是mid的计算,很多人会写成这样mid = (begin + end) / 2,但
是这样写可能会出现溢出现象。具体原因在代码注释中已说明!
代码如下:
#include <iostream>#include <vector>#include <algorithm>using namespace std;//************************************************************// Author:qianghaohao(Xqiang)//************************************************************// 二分查找算法:// 平均查找长度:ASL=log2(n+1) - 1// 时间复杂度: O(log(n))int BinarySearch(const vector<int> &v, int begin, int end, const int &key) { int mid; while (begin <= end) { //写成这样为了防止溢出:当数组很多的时候,且begin接近 //于INF_MAX,end也接近于INF_MAX,这样如果mid写成(begin+end)/2 //由于begin+end肯定溢出,导致最终结果出现负数.所以mid写成如下形式: // 也可以将mid声明成long long类型,避免溢出 mid = begin + (end - begin) / 2; if (key > v[mid]) { begin = mid + 1; } else if (key < v[mid]) { end = mid - 1; } else { return mid; } } return -1;}int main(){ vector<int> v = {1, 2, 3}; cout << BinarySearch(v, 0, 2, 3) << endl; return 0;}
0 0
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- [转载]查找算法----二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法_二分查找
- 算法 二分查找(折半查找)
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- Mark and show mark tools
- yum安装软件时报错
- iOS开发中ARC与非ARC的混合编程
- java通过字符串调用方法,java反射应用实例
- 创建gem包
- 二分查找算法
- Gvim配置
- Tomcat运行报错:严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
- 递归下降分析程序构造方法
- ubuntu安装Eclipse和创建快捷方式
- 面试题001
- XCode真机调试APP时报dyld: Library not loaded: @rpath/XXX等错误
- oracle insert all 用法
- 运算符重载一