博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找及其变种
阅读量:4092 次
发布时间:2019-05-25

本文共 3153 字,大约阅读时间需要 10 分钟。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;template
vector
genArray(){ time_t now_time; now_time = time(NULL); std::default_random_engine generator(now_time); std::uniform_int_distribution
distribution(-100,100); auto dice = bind ( distribution, generator ); vector
v; for (int &_var: vector
(10)) { int e = dice(); v.push_back(e); } sort(v.begin(), v.end()); return v;}/*---------------------------------------------------- * 常规二分查找 *----------------------------------------------------*/int bSearch(vector
arr, int size, int value){ size_t mid; size_t low = 0; size_t high = static_cast
(size) - 1; while (low <= high) { mid = low + ((high - low) >> 1); if(arr[mid] < value) { low = mid + 1; }else if (arr[mid] > value) { high = mid - 1; }else { return static_cast
(mid); } } return -1;}/*---------------------------------------------------- * 二分查找变体一:查找第一个值等于给定值的元素:6 7 7 8 *----------------------------------------------------*/int bSearch_1(vector
arr, int size, int value){ size_t mid; size_t low = 0; size_t high = static_cast
(size) - 1; while (low <= high) { mid = low + ((high - low) >> 1); if(arr[mid] < value) { low = mid + 1; }else if (arr[mid] > value) { high = mid - 1; }else { if ( (mid==0) || (arr[mid - 1] != value)) return static_cast
(mid); else high = mid - 1; } } return -1;}/*---------------------------------------------------- * 二分查找变体二:查找最后一个值等于给定值的元素:6 7 7 8 *----------------------------------------------------*/int bSearch_2(vector
arr, int size, int value){ size_t mid; size_t low = 0; size_t high = static_cast
(size) - 1; while (low <= high) { mid = low + ((high - low) >> 1); if(arr[mid] < value) { low = mid + 1; }else if (arr[mid] > value) { high = mid - 1; }else { if ( (mid==0) || (arr[mid + 1] != value)) return static_cast
(mid); else low = mid + 1; } } return -1;}/*---------------------------------------------------- * 二分查找变体三:查找第一个大于等于给定值的元素:6 7 9 19 查 8 *----------------------------------------------------*/int bSearch_3(vector
arr, int size, int value){ size_t mid; size_t low = 0; size_t high = static_cast
(size) - 1; while (low <= high) { mid = low + ((high - low) >> 1); if (arr[mid] >= value) { if ( (mid==0) || (arr[mid - 1] < value)) return static_cast
(mid); else high = mid - 1; }else { low = mid + 1; } } return -1;}/*---------------------------------------------------- * 二分查找变体四:查找最后一个小于等于给定值的元素:6 7 9 19 查 8 *----------------------------------------------------*/int bSearch_4(vector
arr, int size, int value){ size_t mid; size_t low = 0; size_t high = static_cast
(size) - 1; size_t len = high; while (low <= high) { mid = low + ((high - low) >> 1); if (arr[mid] <= value) { if ( (mid==len) || (arr[mid + 1] > value)) return static_cast
(mid); else low = mid + 1; }else { high = mid - 1; } } return -1;}int main(){ int value; while (1) { vector
array = genArray
(); copy(array.begin(), array.end(), ostream_iterator
(cout, " ")); cout<
<<"search value >:"; cin >> value; int pos = bSearch_3(array, static_cast
(array.size()), value); cout <<"pos:"<
<< endl; } return 0;}

转载地址:http://yecii.baihongyu.com/

你可能感兴趣的文章
Vue 3.0 公开代码之后的一些争论
查看>>
紧急通告!知名办公软件 Teamviewer 被黑,请立即采取应对措施!
查看>>
推荐一位 GitHub 57k+ Star 项目作者的公众号
查看>>
UC 伯克利最新深度强化学习课程上线(附 B 站视频)!
查看>>
VS Code 为什么能这么牛?
查看>>
很强!GitHub 中文项目排行榜新鲜出炉!
查看>>
大学辍学、自学编程,GitHub 创始人是怎么号召 2800 万程序员的?
查看>>
为什么我抛弃了 Ubuntu?
查看>>
GitHub 标星 2.7w+!超全大厂面试笔记整理!
查看>>
牛逼!这款神器能在浏览器跑 VS Code,让你随时随地写代码!
查看>>
推荐一位 10w+ 粉丝的 Python 工程师
查看>>
如何从零开始,自学成为一名数据科学家?
查看>>
前 Facebook 工程师:不要再用你认为正确的方式学算法了!
查看>>
英伟达小姐姐开源 Python 隐藏技巧,上了 GitHub 热榜!
查看>>
面经 | 为了拿到 Google offer,我都付出了哪些努力?
查看>>
阿里千万级并发课程开课了,达不到 25.6 万年薪全额退款
查看>>
美观实用!Star 过万,用 Python 做交互式图形的这款工具火了!
查看>>
阿里面试 100% 会问到的 JVM,我们还有必要学吗?
查看>>
VS Code 1.40 发布!可自行搭建 Web 版 VS Code!
查看>>
干了 7 年后端后,我成功转型并拿到了大厂 AI 算法 offer
查看>>