c++实现二分查找法和求平方根
二分法查找,指的是在有序的数组中查找指定的元素。
(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++实现二分查找法和求平方根相关推荐
- 二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)
二分查找: //二分查找(迭代实现) int bsearch(int* array, int low, int high, int index) {int mid;while (low < hi ...
- 详解【C语言】中的二分查找法和折半查找法(例题解答)
目录 问题 思路 详解 代码 问题 在一个有序数组中查找具体的某个数字n 比如我买了一双鞋,你好奇问我多少钱,我说不超过300元.你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜? 答案:你每次猜 ...
- 4_冒泡排序,一次二分查找,求位数
冒泡排序 当前项跟后一项比较大小 小的在前大的在后互换位置 重复执行到所有数据都按照从小到大的顺序排序 int abc[10]={6,8,3,9,1,10,7,2,4,5}; for(int i=0; ...
- 二分查找法和Fibonacci查找
一.简要介绍二分查找算法 二分查找算法(Binary Search)是一种非常经典且有用的查找算法,它适用于有序数组的元素查找,并且思路简单,能够用非常简洁的代码来将其实现,经典版本的二分查找算法最优 ...
- Java基础语法——选择排序、冒泡排序以及二分查找法和Arrays类的使用
本文将带你了解选择排序.冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作 文章目录 一.选择排序 二.冒泡排序 三.二分查找法 四.Arrays类(对数组的操作) ...
- LeetCode——二分查找
二分查找 目录 二分查找法 求开方 大于给定元素的最小元素 有序数组的 Single Element 第一个错误的版本 旋转数组的最小数字 查找区间 1. 二分查找法 正常实现 public int ...
- 二分查找(Java实现)
二分查找:递归实现 public class BinarySearch {/*** @param arr 代查找的数组,需要有序* @param left 查找区间的左界限* @param right ...
- java二分查找范围区间_二分查找(Java实现)
二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...
- LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)
题目: Implement int sqrt(int x). Compute and return the square root of x. 分析:我们平常可能好少会自己去求解某个数的平方根,一般都 ...
最新文章
- 为什么linux自带python_为什么一些linux自带python,而不是C,C++,java等其他编程语言?...
- 成都东软学院新生周赛(五)
- delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)
- [资源分享] 吴恩达最新《机器学习训练秘籍》中文版可以免费下载了
- cad2016中选择全图字体怎么操作_抖音上的书单都是用啥做的,抖音书单图片怎么做...
- Javascript的两种“单引号”
- 查看系统中支持CUDA的设备数量和属性---deviceQuery示例
- CACHECLOUDV1.0慢日志定时任务创建流程分析
- python no such file or directory_Python3 no such file or directory
- shell字符串的截取的问题
- C语言_字符串转数字
- RoboCup智能机器人足球教程(四)
- 计算机硬件维护注意事项,电脑硬件日常维护和注意事项
- centossocket5服务器搭建
- Citrix PVS无盘系统最小环境搭建
- Linux Oracle install studing
- 【vscode】网易云音乐插件Please interact with the document first otherwise play() will failed解决方法
- C# 获取USB设备列表
- linux微软雅黑乱码,CentOS安装微软雅黑,解决drawImage中文乱码相关问题
- 程序员必学电脑计算机专业英语词汇 09 (111 单词)