数据结构之查找和排序
文章目录1.查找1.1 线性表查找1.2 查找树1.2.1 二叉查找/搜索/排序树 BST1.2.2 平衡二叉树1.2.3 红黑树1.2.4 B树(平衡树)1.2.5 B树1.2.6 B*树1.3 哈希表查找1.3.1 哈希表的结构和特点1.3.2 哈希表是如何添加数据的1.3.3 哈希表是如何查询数据的1.3.4 hashCode和equals的作用1.3.5 各种类型数据的哈希码如何获取1.查找1.1 线性表查找1顺序查找publicclassSearchDemo1{publicstaticvoidmain(String[]args){// 给定分数数组int[]scoreArr{89,45,78,45,100,98,86,100,65};// 给定要查找的分数intscore100;// 完成查找intindex-1;for(inti0;iscoreArr.length;i){if(scoreArr[i]score){indexi;break;}}// 输出结果if(index-1){System.out.println(该分数不存在);}else{System.out.println(score的索引是index);}}}2折半查找顺序结构、按照关键字有序①非递归publicclassSearchDemo2{publicstaticvoidmain(String[]args){// 给定数组int[]arr{1,2,3,4,5,6,7,8,9,10};//给定要查找的值intkey9;// 进行折半二分查找intindexbinarySearch(arr,key);// 输出结果if(index-1){System.out.println(该分数不存在);}else{System.out.println(key的索引是index);}}// 不使用递归publicstaticintbinarySearch(int[]array,intkey){// 指定low和highintlow0;inthigharray.length-1;// 折半查找while(lowhigh){// 求midintmid(lowhigh)/2;// 判断是否等于if(keyarray[mid]){returnmid;}elseif(keyarray[mid]){highmid-1;}else{lowmid1;}}return-1;}}②递归publicclassSearchDemo3{publicstaticvoidmain(String[]args){// 给定数组int[]arr{1,2,3,4,5,6,7,8,9,10};//给定要查找的值intkey10;// 进行折半二分查找intindexbinarySearch(arr,key);// 输出结果if(index-1){System.out.println(该分数不存在);}else{System.out.println(key的索引是index);}}// 使用递归publicstaticintbinarySearch(int[]array,intkey){//指定low和highintlow0;inthigharray.length-1;returnbinarySearch(array,key,low,high);}publicstaticintbinarySearch(int[]array,intkey,intlow,inthigh){// 递归结束的条件if(lowhigh){return-1;}intmid(lowhigh)/2;if(keyarray[mid]){returnmid;}elseif(keyarray[mid]){returnbinarySearch(array,key,low,mid-1);}else{returnbinarySearch(array,key,mid1,high);}}}1.2 查找树1.2.1 二叉查找/搜索/排序树 BST1或者是一棵空树2或者是具有下列性质的二叉树①若它的左子树不为空则左子树上所有结点的值均小于它的根结点的值②若它的右子树上所有结点的值均大于它的根结点的值③它的左、右子树也分别为二叉排序树注意对二叉查找树进行中序遍历得到有序集合1.2.2 平衡二叉树自平衡二叉查找树又被称为AVL树(有别于AVL算法)1它是一棵空树2或它的左右两个子树的高度差(平衡因子)的绝对值不超过1并且左右两个子树都是一棵平衡二叉树同时平衡二叉树必定是二叉搜索树反之则不一定①平衡因子结点的平衡因子是结点的左子树的高度减去右子树的高度②平衡二叉树每个结点的平衡因子都为1、-1、0的二叉排序树。或者说每个结点的左右子树的高度最多差1的二叉排序树。3二叉树的目的是为了减少二叉查找树层次提高查找速度平衡二叉树的常用实现方法有AVL、红黑树、替罪羊树、Treap、伸展树等。1.2.3 红黑树R-B Tree,全称是Red-Black Tree,又称为“红黑树”它是一种平衡二叉树。红黑树的每个结点上都有存储位表示结点的颜色可以是红或黑。红黑树的特性1每个结点或者是黑色或者是红色。2根结点是黑色3每个叶子结点是黑色(注意:这里叶子结点是指为空的叶子结点)4如果一个结点是红色则它的子节点必须是黑色的。5从一个结点到该结点的子孙结点的所有路径上包含相同数目的黑结点。红黑树的应用比较广泛主要用它来存储有序的数据它的时间复杂度是O(logN),效率非常高。例如Java集合中的TreeSet和TreeMap1.2.4 B树(平衡树)1.2.5 B树1所有的数据都在最下面一层2在B-树(即B树)基础上为叶子结点增加链表指针所有关键字都在叶子结点中出现非叶子结点作为叶子结点的索引B树总是到叶子结点才命中。1.2.6 B*树1.3 哈希表查找1.3.1 哈希表的结构和特点1hash table(哈希表) 也叫散列表2特点快3结构有多种最流行、最容易理解的是顺序表(主结构)链表4主结构顺序表5每个顺序表的结点再单独引出一个链表1.3.2 哈希表是如何添加数据的1计算哈希码(调用hashCode(),结果是一个int值整数的哈希码取自身即可)2计算在哈希表中的存储位置根据hashcode计算出hash值hashcode是一个整数我们需要将它转化成[0, 数组长度-1]的范围。我们要求转化后的hash值尽量均匀地分布在[0,数组长度-1]这个区间减少“hash冲突”① 一种极端简单和低下的算法是hash值 hashcode/hashcode;也就是说hash值总是1。意味着键值对对象都会存储到数组索引1位置这样就形成一个非常长的链表。相当于每存储一个对象都会发生“hash冲突”HashMap也退化成了一个“链表”。②一种简单和常用的算法是(相除取余算法)hash值 hashcode%数组长度这种算法可以让hash值均匀的分布在[0,数组长度-1]的区间。 早期的HashTable就是采用这种算法。但是这种算法由于使用了“除法”效率低下。JDK后来改进了算法。首先约定数组长度必须为2的整数幂这样采用位运算即可实现取余的效果hash值 hashcode(数组长度-1)。3存入哈希表情况一一次添加成功情况二多次添加成功(出现了冲突[哈希表的存储位置相同]调用equals()和对应链表的元素进行比较,比较到最后结果都是false创建新节点存储数据并加入链表末尾)情况三不添加出现了冲突调用equals()和对应链表的元素进行比较经过一次或者多次比较后结果都是true表明重复不添加结论一哈希表添加数据快(3步即可不考虑冲突)结论二唯一结论三无序1.3.3 哈希表是如何查询数据的和添加数据的过程是相同的结论一哈希表查询数据快结论二哈希表删除数据快结论三哈希表更新数据快(如果更新后影响到哈希码值就比较麻烦了要删除再添加了)1.3.4 hashCode和equals的作用1hashCode()用于计算哈希码是一个整数根据哈希码可以计算出数据在哈希表中的存储位置。2equals()添加时出现了冲突需要通过equals进行比较判断是否相同查询也需要使用equals进行比较判断是否相等1.3.5 各种类型数据的哈希码如何获取1Integer// int就是取自身publicstaticinthashCode(intvalue){returnvalue;}2DoublepublicstaticinthashCode(doublevalue){longbitsdoubleToLongBits(value);return(int)(bits^(bits32));}3StringpublicinthashCode(){inthhash;if(h0value.length0){charval[]value;for(inti0;ivalue.length;i){h31*hval[i];}hashh;}returnh;}

相关新闻

GetQzonehistory:3分钟永久保存QQ空间十年记忆的终极指南

GetQzonehistory:3分钟永久保存QQ空间十年记忆的终极指南

GetQzonehistory:3分钟永久保存QQ空间十年记忆的终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否还记得第一条QQ空间说说的激动心情?那些记录着青…

2026/7/29 17:21:37阅读更多 →
VMware macOS解锁工具:在Windows/Linux上运行苹果系统的完整指南

VMware macOS解锁工具:在Windows/Linux上运行苹果系统的完整指南

VMware macOS解锁工具:在Windows/Linux上运行苹果系统的完整指南 【免费下载链接】unlocker VMware macOS utilities 项目地址: https://gitcode.com/gh_mirrors/unl/unlocker 你是否想在VMware虚拟机中体验macOS的流畅操作,却因官方限制而受阻&a…

2026/7/29 17:21:37阅读更多 →
教师急需的AI学情报告解读手册,手把手教会你3分钟识别虚假预警、2步定位真问题

教师急需的AI学情报告解读手册,手把手教会你3分钟识别虚假预警、2步定位真问题

更多请点击: https://codechina.net 第一章:AI学情分析报告的本质与教育价值 AI学情分析报告并非传统成绩单的数字化翻版,而是基于多源异构教育数据(如课堂互动日志、作业提交时序、错题分布、视频观看行为等)构建的动…

2026/7/29 17:19:37阅读更多 →
6款AI写论文工具推荐

6款AI写论文工具推荐

真正的学术 AI,从不替你代笔,而是做你的选题军师、文献管家、逻辑教练、润色专家。从中文毕业论文到英文期刊发表,从框架搭建到降重合规,这 6 款工具覆盖全场景,帮你用最低时间成本,写出高质量、高原创、高…

2026/7/29 18:36:12阅读更多 →
牙周炎结构免疫研究:PCF如何观察上皮、免疫细胞和微生物信号的空间关系

牙周炎结构免疫研究:PCF如何观察上皮、免疫细胞和微生物信号的空间关系

牙周炎长期被理解为多菌群失衡引发的慢性炎症,但越来越多研究开始关注“结构免疫”概念:非造血细胞并不是被动背景,成纤维细胞、内皮细胞和上皮细胞也可能通过细胞因子、趋化因子和配体-受体互作塑造局部免疫反应。牙周组织恰好是观察结构免疫…

2026/7/29 18:36:12阅读更多 →
文生图Prompt怎么写:把模糊创意拆成七个可控要素

文生图Prompt怎么写:把模糊创意拆成七个可控要素

一、Prompt不是关键词清单文生图的关键,是把脑中的“感觉”翻译成可观察的画面条件。使用百智云图像生成服务时,可以把Prompt拆成主体、动作、环境、构图、风格、色彩光线和比例精细度七部分。产品入口:https://baizhi.cloud/landing/imagege…

2026/7/29 18:36:12阅读更多 →
物联网安全:PIC18F4585与SE050硬件加密方案

物联网安全:PIC18F4585与SE050硬件加密方案

1. 物联网安全现状与SE050的定位在工业4.0和智能家居快速发展的今天,物联网设备的安全隐患已成为行业痛点。根据OWASP IoT Top 10报告,弱密码、不安全的网络服务和缺乏安全更新机制是排名前三的风险因素。传统MCU如PIC18F4585虽然成本低廉且易于部署&…

2026/7/29 18:36:12阅读更多 →
百智云图像生成服务入门:从需求描述到可用视觉草稿

百智云图像生成服务入门:从需求描述到可用视觉草稿

一、为什么从需求而不是“画图”开始对第一次接触生成式图像的团队来说,真正重要的不是堆叠术语,而是先把用途说清楚:画面用于广告海报、文章配图,还是产品概念验证?尺寸比例、主体、受众、氛围和禁用元素都会影响结果…

2026/7/29 18:36:12阅读更多 →
坐地铁、排队的间隙,用这款书籍浓缩听读软件把时间变成知识

坐地铁、排队的间隙,用这款书籍浓缩听读软件把时间变成知识

通勤地铁、排队等候、午休间隙,这些碎片时间构成了当代人难以利用的时间黑洞。行业调研显示,职场人日均碎片化时间约2.4小时,但传统阅读需要在固定时段专注投入,两者形成了难以调和的矛盾。有声书软件推荐开始成为破解这一困局的关…

2026/7/29 18:34:12阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →