目录

基本概念

算法优点

算法实现

例题

例题代码

基本概念

二分查找是一种非常非常高效的查询算法,时间复杂度为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++)相关推荐

  1. 二分查找算法的一点改进

    在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...

  2. 二分查找算法的两种实现方式:非递归实现和递归实现

    二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序. 先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid ...

  3. 二分查找算法为什么要先排序

    其实二分查找算法就和我们在一个英文字典中找一个单词一样,比如要找middle这个单词,先把字典翻到大概中间的位置,那么现在字典就被分成两个部分了,middle这个单词要么在第一个部分,要么在第二个部分 ...

  4. LeetCode面试刷题技巧-二分查找算法代码思路解析

    二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...

  5. 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 ...

  6. 二分查找算法(递归与非递归两种方式)

    首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...

  7. JavaScript实现binarySearch二分查找算法(附完整源码)

    JavaScript实现binarySearch二分查找算法(附完整源码) Comparator.js完整源代码 binarySearch.js完整源代码 binarySearch.test.js完整 ...

  8. 二分查找算法及其变种

    前言 二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法.其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功:若给定的值小于中间记录的 ...

  9. 顺序查找与二分查找算法

    顺序查找算法 顺序查找是非常简单常用的查找算法,基本思路:从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1.该算 ...

  10. 递归与分治——二分查找算法(折半查找算法)

    二分搜索主要解决的问题是确定排序后的数组中是否包含目标元素val. 二分搜索通过持续跟踪数组中包含元素val的范围.分为两个过程,第一就是找到了,第二个就是没找到: 一开始,这个范围是整个数组,然后通 ...

最新文章

  1. 反射 -- 通过字符串操作对象中的成员
  2. 追溯Ceres-Solver中CostFunction类方法
  3. 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
  4. 【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity
  5. 数据库:如果MySQl磁盘满了,如何解决!
  6. Angularjs总结(五)指令运用及常用控件的赋值操作
  7. c语言else匹配问题
  8. Unity3D-光照系统
  9. 如何通过Dataworks禁止MaxCompute 子账号跨Project访问
  10. windows cmd命令行命令
  11. 第一节 42字符串基础
  12. VS2012配置FreeImage
  13. android toast居中显示_Android Toast 设置到屏幕中间以及其他自定义Toast的实现方法...
  14. python输入用户名和密码_验证Python中的用户名和密码输入
  15. JPS(Jump Point Search)寻路及实现代码分析
  16. 关于linux校准时间
  17. ftp服务器上目录文件是否存在,在 Java 中如何检查 FTP 服务器上的文件或目录是否存在...
  18. 启动(程序还没执行生成dump文件的代码)就崩溃的处理流程
  19. java 通过snmp协议获取物理机CPU、内存容量及使用率,存储的容量及使用率
  20. Python 批量翻译图片 附详细代码

热门文章

  1. 中外科学家成功破译首个毒蛙基因组
  2. mysql创建数据库名字中带 - 的方式
  3. php渲染的时候如何提高用户体验,用户体验应该如何提高
  4. Unity如何连接VR设备?
  5. D17 K108-K161
  6. java最大质数_月光软件站 - 编程文档 - Java - 给一个数,返回比它小的最大质数...
  7. Unity3D学习笔记(二、小球滚动吃金币)
  8. 前端项目实战30-多加一个列表表示详情
  9. SQL-常用的5个聚合函数
  10. Excel拒绝输入重复值并将重复值进行提醒标记