C++折半查找的实现

折半查找法也叫做二分查找,顾名思义,就是把数据分成两半,再判断所查找的key在哪一半中,再重复上述步骤知道找到目标key;
注意:(咳咳,敲黑板)折半查找法仅适用于对已有顺序的数组、数据进行操作!!!
很显然,折半查找法相对于其他查找方法例如顺序查找法效率要高很多;
下面我们来实际操作一下,了解二分查找的奥义。
例如:要在数组arr[]={8,7,9,6,4,1,2,5,3,10,11};中查找key=7的位置;首先,我们要先将数组arr中的数据成员进行排序。arr[]={1,2,3,4,5,6,7,8,9,10,11};

如图所示:将该组数据小端记作low,大端记作high,中间值记作mid;
二分法查找时,将所查找的key与mid比较,例如key=7,即可缩小查找范围在mid和high之间;

如图所示即可找到key=low=7;
注意:(敲黑板)如果中间数mid不是整数,需要进行取整。
代码如下:

 #include<bits/stdc++.h>
using namespace std;int BinSearch(int arr[],int len,int key)
{int low=0;               //定义初始最小int high=len-1;          //定义初始最大int mid;                //定义中间值while(low<=high){mid=(low+high)/2;      //找中间值if(key==arr[mid])     //判断min与key是否相等return mid;else if(key>arr[mid]) //如果key>mid 新区间为[mid+1,high] low=mid+1;            else                  //如果key<mid 新区间为[liw,mid-1] high=mid-1; }return -1;                //如果数组中无目标值key,则返回-1; } int main()
{int n=10;int arr[11]={1,2,3,4,5,6,7,8,9,10,11};cout<<BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),n+1);return 0;
}

C++折半查找的实现相关推荐

  1. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  2. python123第k序元素查找_Python实现折半查找并用matplotlib实现动态过程可视化

    折半查找是算法中减治策略的基本例子,实现起来也很简单,但是在网上看到的图片教程不觉得很乾巴麽?? 在这里插入图片描述 这是一个简单的实现: def Reduction(lists, k): " ...

  3. 折半查找函数(from 《The C Programming Language》)

    该函数用于判定已排序的数组array中是否存在某个特定的值value.这里假定数组元素以升序排列,如果数组array中包含value,则函数返回value在array中的位置(介于0~n-1之间的一个 ...

  4. 数据结构之二分查找(折半查找)

    数据结构之二分查找(折半查找) 二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先 ...

  5. python实现二分查找(折半查找)算法

    python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...

  6. 查找(包括顺序查找和折半查找)

    顺序查找 顺序查找又叫线性查找,主要用于线性表中的查找.顺序查找通常情况下分为对一般无序线性表的查找和对按关键字有序的顺序表的查找.下面进行比较讨论: 1.一般线性表的查找 作为一个直观的查找方法,其 ...

  7. 单链表折半查找c语言,为什么有序的单链表不能进行折半查找

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么有序的单链表不能进行折半查找 问题详情:急!!!!拜托高手解答 等级低 分数不高 请帮帮忙 谢谢了回答:这是由链表的特决定的. ...

  8. 算法 - 折半查找(C#)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 递归实现 ...

  9. 折半查找递归算法_两篇文章带你了解java基础算法之递归和折半查找

    2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...

  10. java学习笔记之折半查找法(二分法)

    2019独角兽企业重金招聘Python工程师标准>>> package Xhe.com; //折半查找法(二分法) public class halfSearch {     pub ...

最新文章

  1. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar
  2. ansible及ansible-palybook使用(持续更新)
  3. Java 并发编程:ThreadLocal 的使用及其源码实现
  4. 用FTP客户端实现主机和虚拟机之间文件的传输(方法1)
  5. centos6.2 64安装mysql_centos6.2 64bit安装mysql+php
  6. 事物传递机制、应用、加载时机
  7. mysql配置——库表操作、用户操作
  8. 【SPPS学习一】 SPSS-26软件下载与安装步骤详解
  9. Java—二维码生成与识别(一)
  10. 安卓语音开发之麦克风冲突问题
  11. C#中word文档转html
  12. 3Dmax对齐轴点到其他对象
  13. 关于dll注入方式的学习(全局钩子注入)
  14. NOIP 2020 螺旋升天爆炸记
  15. 如何让电脑显示SVG图片的缩略图
  16. 分享几个简单好用的导航
  17. cisco 3550
  18. 台式计算机摄像头怎么打开,台式机摄像头的打开方法
  19. jdk的下载/安装/配置
  20. 解锁bootloader_如何以官方方式解锁Android手机的Bootloader

热门文章

  1. heartbeat+DRBD+mysql高可用集群实战
  2. 一些图像处理函数用法
  3. 如何下载vSphere Big Data Extensions 1.0免费试用版
  4. LeetCode 116. Populating Next Right Pointers in Each Node
  5. 相对寻址问题求解总结
  6. 单链表的归并算法思路总结
  7. 学习笔记(01):5天Python闯关训练营-103期-re模块使用案例
  8. Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
  9. math.floor
  10. 深入 JavaScript(6) - 一静一动