二分法查找,指的是在有序的数组中查找指定的元素。

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则返回结束,否则开始向两边查找。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

二分法查找的时间复杂度O(logn)。
注:使用二分法之前必须先将数据进行排序。

1.循环二分法实现:

int binarySearch(vector<int> &vi, int key)
{int left = 0;int right = vi.size() - 1;int num = 0;while(left <= right){num ++;int var = (left + right)/2;if(key == vi[var]){cout << "查找次数:" << num << endl;return var;}else if(key < vi[var])right = var - 1;else if(key > vi[var])left = var + 1;}return -1;
}

2.递归调用二分法:

int RecursiveSearch(vector<int> &vi, int key, int left, int right)
{if(left > right)return -1;int var = (left + right)/2;if(key == vi[var]){return var;}else if(key < vi[var]){right = var - 1;return RecursiveSearch(vi, key, left, right);}else if(key > vi[var]){left = var + 1;return RecursiveSearch(vi, key, left, right);}
}
int binarySearch2(vector<int> &vi, int key)
{int left = 0;int right = vi.size() - 1;int ret = RecursiveSearch(vi, key, left, right);return ret;
}

3.已知一个数,求该数的平方根

float precision=0.000000;
double sqrt(double x)
{double left, right, n, last;left=0;right=x;if(x<=0)return x;while((n*n!=x)&&abs(last-n)>precision){n=(left+right)/2;if(n*n<x){left=n;last=n;}else{right=n;last=n;}}return n;
}

c++实现二分查找法和求平方根相关推荐

  1. 二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)

    二分查找: //二分查找(迭代实现) int bsearch(int* array, int low, int high, int index) {int mid;while (low < hi ...

  2. 详解【C语言】中的二分查找法和折半查找法(例题解答)

    目录 问题 思路 详解 代码 问题 在一个有序数组中查找具体的某个数字n 比如我买了一双鞋,你好奇问我多少钱,我说不超过300元.你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜? 答案:你每次猜 ...

  3. 4_冒泡排序,一次二分查找,求位数

    冒泡排序 当前项跟后一项比较大小 小的在前大的在后互换位置 重复执行到所有数据都按照从小到大的顺序排序 int abc[10]={6,8,3,9,1,10,7,2,4,5}; for(int i=0; ...

  4. 二分查找法和Fibonacci查找

    一.简要介绍二分查找算法 二分查找算法(Binary Search)是一种非常经典且有用的查找算法,它适用于有序数组的元素查找,并且思路简单,能够用非常简洁的代码来将其实现,经典版本的二分查找算法最优 ...

  5. Java基础语法——选择排序、冒泡排序以及二分查找法和Arrays类的使用

    本文将带你了解选择排序.冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作 文章目录 一.选择排序 二.冒泡排序 三.二分查找法 四.Arrays类(对数组的操作) ...

  6. LeetCode——二分查找

    二分查找 目录 二分查找法 求开方 大于给定元素的最小元素 有序数组的 Single Element 第一个错误的版本 旋转数组的最小数字 查找区间 1. 二分查找法 正常实现 public int ...

  7. 二分查找(Java实现)

    二分查找:递归实现 public class BinarySearch {/*** @param arr 代查找的数组,需要有序* @param left 查找区间的左界限* @param right ...

  8. java二分查找范围区间_二分查找(Java实现)

    二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...

  9. LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)

    题目: Implement int sqrt(int x). Compute and return the square root of x. 分析:我们平常可能好少会自己去求解某个数的平方根,一般都 ...

最新文章

  1. 为什么linux自带python_为什么一些linux自带python,而不是C,C++,java等其他编程语言?...
  2. 成都东软学院新生周赛(五)
  3. delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)
  4. [资源分享] 吴恩达最新《机器学习训练秘籍》中文版可以免费下载了
  5. cad2016中选择全图字体怎么操作_抖音上的书单都是用啥做的,抖音书单图片怎么做...
  6. Javascript的两种“单引号”
  7. 查看系统中支持CUDA的设备数量和属性---deviceQuery示例
  8. CACHECLOUDV1.0慢日志定时任务创建流程分析
  9. python no such file or directory_Python3 no such file or directory
  10. shell字符串的截取的问题
  11. C语言_字符串转数字
  12. RoboCup智能机器人足球教程(四)
  13. 计算机硬件维护注意事项,电脑硬件日常维护和注意事项
  14. centossocket5服务器搭建
  15. Citrix PVS无盘系统最小环境搭建
  16. Linux Oracle install studing
  17. 【vscode】网易云音乐插件Please interact with the document first otherwise play() will failed解决方法
  18. C# 获取USB设备列表
  19. linux微软雅黑乱码,CentOS安装微软雅黑,解决drawImage中文乱码相关问题
  20. 程序员必学电脑计算机专业英语词汇 09 (111 单词)

热门文章

  1. gdp笔记本 linux,6 Linu下gdp调试技术
  2. 如何设置苹果HomePod扬声器?
  3. 彻底解决PPt一直弹出mathtype错误信息
  4. 正确的Python学习路线图,来了!
  5. 如何设计公司网站首页?要注意什么
  6. Jsp在web开发中常用到的技术(一)
  7. Java输入一个月份判断春夏秋冬季节中switch与if使用
  8. 提取 汉字 拼音 首字母
  9. 音乐与动漫及游戏的关系--游戏动漫音乐音效制作 分贝块
  10. 吉大c 语言程序设计奥鹏作业,吉大19年9月《C语言程序设计》作业考核试题