☞能够掌握求解的算法,并给出详细的执行过程。

☞对于折半搜索二叉树中,若根结点在第1层, 且分枝结点数为= 2& − 1,则外部结点均在第ℎ + 1层。

这同样也是一种利用分治法设计的查找算法——折半查找。

一、基本思想

在有序表中,取中间记录作为比较对象,

若给定值与中间记录的关键码相等,则查找成功;

若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;

若给定值大于中间记录的关键码,则在中间记录的右半区继续查找。

不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。

比中划分示意图

每次取中间元素将查找范围缩小,将时间复杂度降低到了logn级别。

算法流程示意图

二、算法描述

  1. low=1;high=n; //设置初始查找区间
  2. 测试查找区间[low,high]是否存在,若不存在,则查找失败;
  3. 否则取中间点mid=(low+high)/2; 比较k与r[mid],有以下三种情况:
  • 若k<r[mid],则high=mid-1;查找在左半区进行,转2;
  • 若k>r[mid],则low=mid+1;查找在右半区进行,转2;
  • 若k=r[mid],则查找成功,返回记录在表中位置mid;
public int rank(Key key)  //参数key为需要查找的元素
{int lo = 0, hi = N-1;  //初识查找的范围是整个数组while (lo <= hi){int mid = lo + (hi - lo) / 2; int cmp = key.compareTo(keys[mid]);  //Number下的比较大小方法,返回值以调用者来定if       (cmp < 0) hi = mid - 1;  //调用者小于参数,返回-1else  if (cmp > 0) lo = mid + 1;  //调用者小于参数,返回1else     return mid;}return lo;  //如果最后只剩一个元素,说明已经找到
}

三、时间复杂度分析

二分搜索算法在成功搜索的情况下,关键字值之间的比较次数不超过log⁡n+1。对于不成功搜索,算法需要作log⁡n或log⁡n+1次比较。

二分搜索算法在搜索成功时的平均时间复杂度为Θ(log⁡n)。

注:二叉搜索树可参考:

yyHaker:二叉搜索树(BinarySearchTree)​zhuanlan.zhihu.com

内容有待完善,请各位客官等待更新!

二叉树 查找失败 asl_算法——二分搜索amp;折半查找相关推荐

  1. 查找、检索 算法-总结5 多路查找树/B~树/B+树

    源地址:http://hxraid.javaeye.com/blog/611105 在前面专题中讲的BST.AVL.RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关.那么降低树高自然对查找 ...

  2. 用java写一个折半查找_用Java写一个折半查找。

    import java.util.Comparator; public class MyUtil { public static > int binarySearch(T[] x, T key) ...

  3. c语言折半查找法找字符,C语言折半查找法练习题冒泡排序

    MongoDB管理工具的插件系统 MongoDB管理工具  MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了 ...

  4. 【数据结构----笔记1】查找算法之【顺序查找和折半查找】

    #include<iostream> #include<Windows.h> using namespace std;typedef int ElemType; /*_____ ...

  5. 【数据结构基础应用】【查找和排序算法】

    代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...

  6. C语言数据结构顺序表的顺序查找和折半查找的功能

    C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...

  7. java 用折半查找,java折半查找算法

    //当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...

  8. C语言折半查找算法及代码实现

    1.折半查找的定义: 在计算机中,折半查找,也称二分搜索.它是一种在有序数组中查找某一特定元素的搜索算法. 2.折半查找的实现原理:  搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则 ...

  9. 经典算法 之 折半查找 python实现

    ​ ​ 活动地址:CSDN21天学习挑战赛 折半查找 1.查找算法 基本概念 不同查找算法分类 2. 折半查找 伪代码 算法评价 3. 算法实践(Python) 折半查找 参考 1.查找算法 查找(S ...

最新文章

  1. 【C语言】数组指针与指针数组的区分与应用
  2. 一次失败的机巡平台对接经历分享
  3. “大数据系统软件国家工程实验室”建设项目通过验收
  4. golang 1.18 新增泛型 简介
  5. 项目经理案头手册学习系列【12】——使用挣值分析法控制项目
  6. 1.1 VMware 一步一步创建虚拟机
  7. 《统计学习方法》代码更新了-(github的star数5300+)
  8. CM: How is attachment version implemented
  9. 7-1 字母统计图 (10 分)(思路+详解)
  10. Markdown 进阶
  11. Fatal error: Call to undefined function randstr()
  12. R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
  13. Unity3D最全性能优化参考手册(渲染、代码、UI)
  14. 安卓代码怎么设置省电模式_Android手机省电加速设置大全
  15. linux 驱动安装带参数,【转】Intel Linux显卡驱动安装指南
  16. (一)Word中如何将表格断开,并且增加空的一行
  17. 【Jupyter Notebook】添加目录--Table of Contents
  18. N-Gram模型介绍
  19. 字节校招面试题分享,别人已经开始面试了,你不会还没有准备吧?
  20. 介绍6款超实用的抖音数据分析工具!

热门文章

  1. c# java gt;gt;gt;,C#的相当于Java的&LT ;?扩展底座&GT;在仿制药
  2. java水仙花数代码_java知识分享篇(五)
  3. LindDotNetCore~入门基础
  4. apache调优隐藏版本信息及404重定向
  5. 在Ubuntu和CentOS上搭建NodeJs的执行环境步骤
  6. 轨迹分析_解析几何中的轨迹问题中经典问题,有详细分析及其解答
  7. java线程池需要shutdown吗_公用线程池要不要shutdown?
  8. 玩游戏用什么轴的机械键盘好_机械键盘选什么轴?全方面分析各轴手感和区别...
  9. 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
  10. FPGA实现VGA显示(四)——————读取ROM显示彩色图片(a)