模板

i=1:j=n              'i初值为1,j初值为n
Do while i<=j        '当i<=j时,通过循环进行查找
    m=fix((i+j)/2)     '计算出中间元素的下标m
    If d(m)=key Then '若中间元素d(m)和key相等,则输出m;退出循环
        print m
        Exit Do
    End If
    If d(m)<key Then
        i=m+1         '[m+1,j]下一查找范围
    Else
        j=m-1         '[i,m-1]
    End If
Loop
If i>j Then print"0"   '未找到

注意点及变式

  • 查找次数:LogN(若不是整数,则向上取整)

  • 计算中间元素的下标的方法有很多种,是选择题中小小的坑(我掉进去好多次了)

'e.g.
'偶数组 1 2 3 4 5 6 7 8
'奇数组 1 2 3 4 5 6 7 8 9
'偶数组 i=1:j=8  奇数组 i=1;j=9
'                      偶数组    奇数组                   备注
① Int((i+j)/2)    '      4        4           删除小数部分而返回剩下的整数
② Fix((i+j)/2)    '      4        4
③ (i+j)/2         '     4.5       5          Dim c as integer c=(i+j)/2=4
④ (i+j)\2         '      4        5                 选择左数或中间数
⑤ (i+j+1)/2       '      5        5                 选择右数或中间数
⑥ Fix((i+j)/2 +0.5)'

一般而言题目多为选择左数与中数。

还要看清数组编号是0开始还是1开始,在高中试卷里是1开始为多

  • 二叉树法

qwq图片是从老师课件里白嫖来哒(溜

例题:

有如下VB程序段:

i = 1 : j = 10 : flag = True : n = 0
Key = Val(Text1.Text)
Do While i <= j And flag = True
   m = (i + j) \ 2
   If a(m) = Key Then
      flag = False
   Elseif a(m) > Key Then
       i = m + 1 : n = n - 1
   Else
      j = m - 1 : n = n + 1
   End If
Loop

数组元素a(1)到a(10)依次是99, 94, 90, 87, 70 , 69 , 60 , 56 , 45 , 36 ,变量n的值最终是0,则文本框Text1输入的数字可能是

A.100 B.87 C.69 D.4

用二叉树解题的最明显的特征就是n=n-1;n=n+1,在本题中前者的含义是“当需要查找的值Key比二分点要小,则向右查找,并且n-1”(数据是降序),后者反之亦然。

n=向左缩进的次数-向右缩进的次数

所以模拟出下面的一棵二叉树(蓝字为数,红字为n)



很容易看出n=0时,所查数为69、70、90.故题目的答案为C

以上是很基本的裸题,先来看看注意点:

  1. 数字排序升or降?什么时候n+1或是n-1?
  2. 查找到数时程序是否继续进行

    本题中采用了Flag与If、ElseIf、Else,还有Exit For也能达到找到就会停止程序的目的。如果代码中缺少上面的语句,如两个If且不带Exit For、只有If与Else,程序继续,n的值仍然会改变,这时候就还要继续画二叉树了
  3. 选项中有大于最大值和小于最小值的数

    就是题中的A100与D4,图中已画出。需要在原二叉树(仅数列)的最左侧与最右侧扩展开,具体见图。
  4. 变式:求n满足0时输入数据的范围

    Answer:(Loading……)这块地方我也还不懂……如果你会的话可以来教教我吗……
暂时想到的难点就这些了,如果后面写题目又遇到新的,会继续更新。欢迎纠正哦~

小花絮:写博客时问老师题目的截图(肯定又是和lp过节去了哼这个男人略略略)



[Visual Basic]二分查找的更多相关文章

  1. 基于visual Studio2013解决面试题之1307二分查找

     题目

  2. 《Visual Basic开发实战1200例》包括第I卷、第II卷共计1200个例子,本书是第I卷,共计600个例子。

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual Basic进行程序开发各个方面的知识和技巧.主要包括基础知识.窗体界面设计.控件应用等.全书分6篇20章,共计6 ...

  3. 演练:Office 编程(C# 和 Visual Basic)

    https://msdn.microsoft.com/zh-cn/library/ee342218(v=vs.110).aspx PIA的全称是 primary interop assembly  主 ...

  4. VS2017远程调试C#或 Visual Studio 中的 Visual Basic 项目

    来源:远程调试C#或 Visual Studio 中的 Visual Basic 项目 若要调试已部署在另一台计算机的 Visual Studio 应用程序,安装和在其中部署您的应用程序的计算机上运行 ...

  5. Visual Basic 2017 操作Excel和word【1】持续更新……

    我坚持在VB的路上走到黑…………  清单1.1  从应用程序对象导航到Excel中的工作表  Dim myWorkbooks As Excel.Workbooks = app.Workbooks ) ...

  6. 常用算法1 - 快速排序 & 二分查找

    1. 二分查找法: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1. 二分查找法要求数据为一组有序的序列(大到小 ...

  7. 【C/C++学院】0723-32位与64位/调戏窗体程序/数据分离算法/内存检索/二分查找法/myVC

    [送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...

  8. 二分查找算法java

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...

  9. 数据结构实验7:实现二分查找、二叉排序(查找)树和AVL树

    实验7 学号:      姓名:     专业: 7.1实验目的 (1) 掌握顺序表的查找方法,尤其是二分查找方法. (2) 掌握二叉排序树的建立及查找. 查找是软件设计中的最常用的运算,查找所涉及到 ...

随机推荐

  1. python入门机器学习,3行代码搞定线性回归

    本文着重是重新梳理一下线性回归的概念,至于几行代码实现,那个不重要,概念明确了,代码自然水到渠成. “机器学习”对于普通大众来说可能会比较陌生,但是“人工智能”这个词简直是太火了,即便是风云变化的股市 ...

  2. 阿里云服务器上搭建seafile专业版

    因为官方一键安装教程在阿里云服务器上无法安装,由于水平有限,无法解决,所以选择手动安装 参考资料: 1,.腾讯云搭建seafile服务器 2.How to Install Seafile with N ...

  3. C++ Primer Plus 学习之 类继承

    主要介绍了类的继承.虚函数.类继承的动态内存分配问题.继承与友元函数. 公有派生 基类的公有成员和私有成员都会成为派生类的一部分. 基类的私有成员只能通过基类的公有或者保护方法访问.但是,基类指针或引 ...

  4. 【Java】macOS下编译JDK8

    安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...

  5. golang 统计系统测试覆盖率

    golang 统计系统测试覆盖率 参考资料 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests https:/ ...

  6. Metaploit-永恒之蓝漏洞利用

    目录 Metaploit介绍 实验环境 漏洞利用过程 Metaploit介绍 本次测试主要是利用永恒之蓝漏洞对windows7进行控制利用,掌握Metaploit工具的使用,知道永恒之蓝的漏洞利用原理 ...

  7. LeetCode--链表2-双指针问题

    LeetCode--链表2-双指针问题 思考问题: 判断一个链表是否有环 列举几种情况: graph LR A-->B B-->C C-->D D-->E E-->C g ...

  8. Cisco模拟器的基本使用

    获取帮助查找命令 只需输入一个'?'便可得到详细的帮助信息,如果想获取c开头的命名,那么直接输入'c?'即可. 在各个模式下切换的方法 给如图所示路由器接口配置IP地址 第一步:安装HWIC-2T(串 ...

  9. 震惊,当我运行了这条Linux命令后,服务器竟然... (Linux中的删除命令)

    震惊,当我运行了这条Linux命令后,服务器竟然... 0X00 写在前面 大家都听说过删库命令rm -rf /*,但是谁又真正实践过呢?但作为一个程序员,不看看这条命令执行后会发生什么,怎么能甘心呢 ...

  10. 三年前端,面试思考(头条蚂蚁美团offer)

    小鱼儿本人985本科,软件工程专业,前端.工作三年半,第一家创业公司,半年.第二家前端技术不错的公司,两年半.第三家,个人创业半年.可以看出,我是个很喜欢折腾的人,大学期间也做过很多项目,非常愿意参与 ...