查找
来源:互联网 发布:大数据与商业模式变革 编辑:程序博客网 时间:2024/04/29 22:26
二分查找
基本实现
先排序
bool search_key(int key,int n,int *a){ int right,left,middle; right = n-1; left = 0; while (left<=right){ middle = (left+right)/2; if (a[middle]>key){ right = middle-1; } else if (a[middle]<key){ left = middle+1; } else{ return true; } } return false;}
上述代码的注意点:
初始条件:left = 0,right=n-1
循环条件:left<=right,一定有等于
使用STL
二分查找可以通过C++中的lower_bound实现,这只是针对一般的数据结构。
//在区间[a,a+n)上进行检索int position = lower_bound(a,a+n,value)-a;//返回第一个大于等于value的index值//所以只需要比较a[position]==value即可判断value是否存在//注意的是如果value是最大的值,切不存在,position是越界的
其他应用
手动实现lower_bound
//存在一个升序有序的数组buf,其大小为size,目标数字为targetint base = 0 , top = size; //初始情况与二分查找一致while (base <= top) { int mid = (base + top) / 2;if (buf[mid] <= target) base = mid + 1; //符合前一部分数字规定else top = mid - 1; //否则}int ans = top; //最后,top即为我们要求的数字数组下标,buf[top]为该数字本身
0 0
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- 查找
- python3下安装Scrapy
- easymock教程-使用MockControl
- 获取 metadata 过程详解
- 黑盒测试,白盒测试,灰盒测试
- cd根目录下的命令
- 查找
- C++生成并调用dll
- http://www.ruanyifeng.com/blog/2011/09/curl.html
- 关于信号
- WEB后台--基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)
- Intent用法——在活动之间跳转(二)
- ubuntu系统更改默认软件源为网易软件源
- 机器学习笔记(四)聚类
- Problem E: 同源数