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

☞对于折半搜索二叉树中,若根结点在第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. boot spring 对参数检测_【springboot】@Valid参数校验
  2. 金字塔原理只需读前几页
  3. 动态规划编程模型的本质及应用
  4. mysql+数据库主从原理_MySQL主从复制原理及实现
  5. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting、模型融合
  6. Kettle parameter方式实现循环
  7. UCBCS188 AI学习笔记(2)informed search (启发函数搜索)
  8. 暴风影音 去广告 方法
  9. 数字电路与系统(第三版)答案 戚金清 王兢
  10. 数据流图转换为软件结构图
  11. SLT2021: CONVERSATIONAL END-TO-END TTS FOR VOICE AGENTS
  12. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  13. Jdon DDD分析法
  14. “由于文件许可权错误,word无法完成保存操作”的解决办法
  15. 我是如何让公司后台管理系统焕然一新的(上) -性能优化
  16. js下载文件防止白屏
  17. 购物车——js小项目实例
  18. Python垃圾收集机制
  19. hive 之多表查询
  20. 应届毕业生身份有什么用?应注意事项?

热门文章

  1. 操作属性之修改样式属性
  2. mfc之DDX_Control作用
  3. zlib 加密 java_JAVA自带Zlib+base64位压缩加密和解压解密
  4. 如何将mysql中的表传到elipse中_eclipse怎么连接到MySQL中的表!!!!!
  5. redhat multipath配置文件简要说明
  6. win8删除后清空回收站文件怎么恢复
  7. Nginx学习笔记(二) Nginx--connectionrequest
  8. cstringw转lpctstr_CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化...
  9. JSON与localStorage的爱恨情仇
  10. 【编译原理笔记12】中间代码生成:简单赋值语句的翻译,数组引用的翻译