二分查找算法(c++)
目录
基本概念
算法优点
算法实现
例题
例题代码
基本概念
二分查找是一种非常非常高效的查询算法,时间复杂度为O(logn)。
二分查找法(Binary Search)算法,也叫折半查找算法。二分查找要求数组数据必须采用顺序存储结构有序排列。查找思想有点类似于分治思想。每次都通过跟区间的中间元素对比,将带查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。
算法优点
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
算法实现
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
例题
题目描述
已知有序表: 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 ,要求输入需要查询的数据, 用折半查找算法, 查找该数在有序表中的位置.
输入
输入待查询的数据
输出
如果找到该数, 输出该数在有序表中的位置, 如果没有找到输入-1;
样例输入
15
样例输出
0
例题代码
#include<iostream>using namespace std;int main(){int a[15] = { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 },left=0,right=14,n;cin >> n;while (left <= right){int middle = left + (right - left) / 2;if (a[middle] < n)right = middle - 1;else if (a[middle] > n)left = middle + 1;else{cout << middle ;break;}}if (n < 1 || n>15)cout << -1;return 0;}
二分查找算法(c++)相关推荐
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
- 二分查找算法的两种实现方式:非递归实现和递归实现
二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序. 先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid ...
- 二分查找算法为什么要先排序
其实二分查找算法就和我们在一个英文字典中找一个单词一样,比如要找middle这个单词,先把字典翻到大概中间的位置,那么现在字典就被分成两个部分了,middle这个单词要么在第一个部分,要么在第二个部分 ...
- LeetCode面试刷题技巧-二分查找算法代码思路解析
二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...
- Python 二分查找算法
如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76 ...
- 二分查找算法(递归与非递归两种方式)
首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...
- JavaScript实现binarySearch二分查找算法(附完整源码)
JavaScript实现binarySearch二分查找算法(附完整源码) Comparator.js完整源代码 binarySearch.js完整源代码 binarySearch.test.js完整 ...
- 二分查找算法及其变种
前言 二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法.其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功:若给定的值小于中间记录的 ...
- 顺序查找与二分查找算法
顺序查找算法 顺序查找是非常简单常用的查找算法,基本思路:从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1.该算 ...
- 递归与分治——二分查找算法(折半查找算法)
二分搜索主要解决的问题是确定排序后的数组中是否包含目标元素val. 二分搜索通过持续跟踪数组中包含元素val的范围.分为两个过程,第一就是找到了,第二个就是没找到: 一开始,这个范围是整个数组,然后通 ...
最新文章
- 反射 -- 通过字符串操作对象中的成员
- 追溯Ceres-Solver中CostFunction类方法
- 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
- 【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity
- 数据库:如果MySQl磁盘满了,如何解决!
- Angularjs总结(五)指令运用及常用控件的赋值操作
- c语言else匹配问题
- Unity3D-光照系统
- 如何通过Dataworks禁止MaxCompute 子账号跨Project访问
- windows cmd命令行命令
- 第一节 42字符串基础
- VS2012配置FreeImage
- android toast居中显示_Android Toast 设置到屏幕中间以及其他自定义Toast的实现方法...
- python输入用户名和密码_验证Python中的用户名和密码输入
- JPS(Jump Point Search)寻路及实现代码分析
- 关于linux校准时间
- ftp服务器上目录文件是否存在,在 Java 中如何检查 FTP 服务器上的文件或目录是否存在...
- 启动(程序还没执行生成dump文件的代码)就崩溃的处理流程
- java 通过snmp协议获取物理机CPU、内存容量及使用率,存储的容量及使用率
- Python 批量翻译图片 附详细代码