本帖最后由 爱疯 于 2015-10-28 16:31 编辑

二分查找(折半查找)

1)前提:有序数组。

2)思想:在当前查找区中,x是被查找的值;min是左端最小值下标;max是右端最大值下标;mid是两个端点之间中点下标。不断的判断:

如果x

如果x>arr(mid),则去右半部分[mid+1,max]继续找x ...,

如果x=arr(mid),则mid就是x的位置,程序结束。

如果min>max,则返回-1,表示找不到x,程序结束。

3)试题:在有序数组中插入一个元素,并保证该数组仍有序。求插入的位置?

回答:通过折半方式,查找该元素的位置。如果该元素已存在,就插入到该元素的位置;否则,插入到当前最小索引的位置。

'**************************************************************************************

'需求:在数组arr中查找x,有就返回下标,没有则返回-1。

Sub test()

Dim arr()

arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

MsgBox binarySearch2(arr, 3), , "下标"

End Sub

'**************************************************************************************

Function binarySearch1(arr, x) As Long

Dim min&, max&, mid&

min = LBound(arr)

max = UBound(arr)

mid = (min + max) / 2

Do While x <> arr(mid)

If x > arr(mid) Then min = mid + 1 Else max = mid - 1

If min > max Then mid = -1: Exit Do

mid = (min + max) / 2

Loop

binarySearch1 = mid

End Function

'**************************************************************************************

Function binarySearch2(arr, x) As Long

Dim min&, max&, mid&

binarySearch2 = -1

min = LBound(arr)

max = UBound(arr)

Do While min <= max

mid = (min + max) / 2

If x = arr(mid) Then binarySearch2 = mid: Exit Do

If x > arr(mid) Then min = mid + 1 Else max = mid - 1

Loop

End Function

'**************************************************************************************

二分查找_百度百科

二分查找向上还是向下取整_二分查找时,为什么中点不可以向上取整?相关推荐

  1. 语句中如何结束本循环进入下一循环_第33 p,for遍历,循环取值最方便

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第33篇文章,第二阶段的课程:Python基础知识:Python中的控制语句之for遍历. 学习本课程,建议先看一遍:[计算机基础知 ...

  2. python爬取站_简单python爬虫练习 E站本爬取

    必备条件: 一台能上404的机子.. 过程: 由于也只是初学爬虫,个中技巧也不熟练,写的过程中的语法用法参考了很多文档和博客,我是对于当前搜索页用F12看过去..找到每个本子的地址再一层层下去最后下载 ...

  3. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!

    今天,我们利用Python 中的selenium爬取网易云音乐中林俊杰<将故事写成我们>的评论,具体界面如下: 私信小编01 获取数十套PDF!爬虫 web都有的呢! 具体代码如下: #此 ...

  4. 用python爬取网站_「自如网」关于用python爬取自如网信息的价格问题(已解决) - seo实验室...

    自如网 ###这是一篇求助文,我能获取图片并变成字符串,但是无法获取位移量### 前两坛突发奇想想要爬取自如网的租房数据,本来以为能够请求+美丽+ re能全部搞定,没想到这个网站的反爬机制有点让我搞不 ...

  5. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  6. mysql按行取数据_菜鸟求助:怎么在mysql隔12行取一条数据呀??

    你的位置: 问答吧 -> PHP基础 -> 问题详情 菜鸟求助:怎么在mysql隔12行取一条数据呀?? 我的问题是这样的: 我的数据库是每5分钟一行数据 我要隔一小时取一条数据 也就是每 ...

  7. python登录网站后爬取数据_如何用 Python 登录主流网站,爬取一些需要的数据

    最近收集了一些网站的登陆方式和爬虫程序,有的通过 selenium 登录,有的则通过抓包直接模拟登录.作者希望该项目能帮助初学者学习各大网站的模拟登陆方式,并爬取一些需要的数据. 作者表示模拟登陆基本 ...

  8. java 幂取模_计算一个数与2的n次方取模

    HashMap的数据是存储在链表数组里面的.在对HashMap进行插入/删除等操作时,都需要根据K-V对的键值定位到他应该保存在数组的哪个下标中. 而这个通过键值求取下标的操作就叫做哈希. HashM ...

  9. python 取反_利用python怎么对bool布尔值进行取反

    利用python怎么对bool布尔值进行取反 发布时间:2020-12-14 14:49:17 来源:亿速云 阅读:71 这期内容当中小编将会给大家带来有关利用python怎么对bool布尔值进行取反 ...

最新文章

  1. 001_FreeMarker介绍
  2. it oracle 培训,Oracle数据库技术培训_OracleDBA数据库工程师_Oracle数据库在线学习视频教程_IT职业培训-51CTO学院_精培学院...
  3. 12864液晶——读写、划点、划线、汉字、32*16的字符
  4. hust 1605 bfs
  5. python利用列表计算斐波那契数列前30项_python斐波那契数列的计算方法
  6. 2016-11-18(2)(Unity相关)---脚本基础
  7. linux操作系统-SSH原理介绍与免密运用与远程命令操作
  8. X64_Xcelera-CL_PX4采集卡测试记录
  9. bzoj2648/2716 kdtree
  10. axure轮播图怎么设置循环轮播_Axure RP8 动态面板之轮播图设置
  11. 转载 LDAP Schema Design
  12. 电子书下载:C# 语言规范 3.0 , 4.0 中文版
  13. 软件工程——(2)软件项目管理 思维导图
  14. AEJoy —— 表达式之弹性震动模拟详解【JS】
  15. EastFax 远程调用Ukey助力医学院
  16. 河北安新复合型水稻 国稻种芯·中国水稻节:雄安生态示范区
  17. mysql 数据库清理缓存
  18. Kafka知识点概述
  19. 算法笔记 简单贪心(月饼问题)
  20. LR参数化,参数化类型:Fille类型--参数分配与取值规律

热门文章

  1. 从 7天(北京首都师范大学店) 到 新中央电视台(大裤衩儿)
  2. CET4和CET6听力十大场景归纳
  3. 不懂人情世故就是垃圾
  4. python英文字符表示_python利用utf-8编码判断中文英文字符(转)
  5. 房地产评估师考试能用计算机,2010全国房地产估价师考试考前注意事项
  6. 一个非计算机专业出身的计算机从业人员的计算机学习经历
  7. KVM-virsh详解
  8. w7没有服务器认证消息,w7没有有效的ip配置怎么解决_win7本地连接没有有效的Ip配置处理方法...
  9. x8086千行汇编项目——汇编贪吃蛇、画图、两个程序的调度
  10. CNET盘点2012年IT人物:进退得意还是没落迷茫