二叉树 查找失败 asl_算法——二分搜索amp;折半查找
![](/assets/blank.gif)
☞能够掌握求解的算法,并给出详细的执行过程。
☞对于折半搜索二叉树中,若根结点在第1层, 且分枝结点数为= 2& − 1,则外部结点均在第ℎ + 1层。
这同样也是一种利用分治法设计的查找算法——折半查找。
一、基本思想
•在有序表中,取中间记录作为比较对象,
若给定值与中间记录的关键码相等,则查找成功;
若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;
若给定值大于中间记录的关键码,则在中间记录的右半区继续查找。
•不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。
![](/assets/blank.gif)
每次取中间元素将查找范围缩小,将时间复杂度降低到了logn级别。
![](/assets/blank.gif)
二、算法描述
- low=1;high=n; //设置初始查找区间
- 测试查找区间[low,high]是否存在,若不存在,则查找失败;
- 否则取中间点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; //如果最后只剩一个元素,说明已经找到
}
三、时间复杂度分析
二分搜索算法在成功搜索的情况下,关键字值之间的比较次数不超过logn+1。对于不成功搜索,算法需要作logn或logn+1次比较。
二分搜索算法在搜索成功时的平均时间复杂度为Θ(logn)。
注:二叉搜索树可参考:
yyHaker:二叉搜索树(BinarySearchTree)zhuanlan.zhihu.com
![](/assets/blank.gif)
内容有待完善,请各位客官等待更新!
![](/assets/blank.gif)
二叉树 查找失败 asl_算法——二分搜索amp;折半查找相关推荐
- 查找、检索 算法-总结5 多路查找树/B~树/B+树
源地址:http://hxraid.javaeye.com/blog/611105 在前面专题中讲的BST.AVL.RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关.那么降低树高自然对查找 ...
- 用java写一个折半查找_用Java写一个折半查找。
import java.util.Comparator; public class MyUtil { public static > int binarySearch(T[] x, T key) ...
- c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
MongoDB管理工具的插件系统 MongoDB管理工具 MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了 ...
- 【数据结构----笔记1】查找算法之【顺序查找和折半查找】
#include<iostream> #include<Windows.h> using namespace std;typedef int ElemType; /*_____ ...
- 【数据结构基础应用】【查找和排序算法】
代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...
- C语言数据结构顺序表的顺序查找和折半查找的功能
C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...
- java 用折半查找,java折半查找算法
//当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...
- C语言折半查找算法及代码实现
1.折半查找的定义: 在计算机中,折半查找,也称二分搜索.它是一种在有序数组中查找某一特定元素的搜索算法. 2.折半查找的实现原理: 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则 ...
- 经典算法 之 折半查找 python实现
活动地址:CSDN21天学习挑战赛 折半查找 1.查找算法 基本概念 不同查找算法分类 2. 折半查找 伪代码 算法评价 3. 算法实践(Python) 折半查找 参考 1.查找算法 查找(S ...
最新文章
- 【C语言】数组指针与指针数组的区分与应用
- 一次失败的机巡平台对接经历分享
- “大数据系统软件国家工程实验室”建设项目通过验收
- golang 1.18 新增泛型 简介
- 项目经理案头手册学习系列【12】——使用挣值分析法控制项目
- 1.1 VMware 一步一步创建虚拟机
- 《统计学习方法》代码更新了-(github的star数5300+)
- CM: How is attachment version implemented
- 7-1 字母统计图 (10 分)(思路+详解)
- Markdown 进阶
- Fatal error: Call to undefined function randstr()
- R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
- Unity3D最全性能优化参考手册(渲染、代码、UI)
- 安卓代码怎么设置省电模式_Android手机省电加速设置大全
- linux 驱动安装带参数,【转】Intel Linux显卡驱动安装指南
- (一)Word中如何将表格断开,并且增加空的一行
- 【Jupyter Notebook】添加目录--Table of Contents
- N-Gram模型介绍
- 字节校招面试题分享,别人已经开始面试了,你不会还没有准备吧?
- 介绍6款超实用的抖音数据分析工具!
热门文章
- c# java gt;gt;gt;,C#的相当于Java的&LT ;?扩展底座&GT;在仿制药
- java水仙花数代码_java知识分享篇(五)
- LindDotNetCore~入门基础
- apache调优隐藏版本信息及404重定向
- 在Ubuntu和CentOS上搭建NodeJs的执行环境步骤
- 轨迹分析_解析几何中的轨迹问题中经典问题,有详细分析及其解答
- java线程池需要shutdown吗_公用线程池要不要shutdown?
- 玩游戏用什么轴的机械键盘好_机械键盘选什么轴?全方面分析各轴手感和区别...
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- FPGA实现VGA显示(四)——————读取ROM显示彩色图片(a)