1.顺序查找
/**顺序查找平均时间复杂度 O(n)
* @param searchKey 要查找的值
* @param array 数组(从这个数组中查找)
* @return 查找结果(数组的下标位置)
*/
public static int orderSearch(int searchKey,int[] array){
if(array==null||array.length<1)
return -1;
for(int i=0;i<array.length;i++){
if(array[i]==searchKey){
return i;
}
}
return -1;
}
2.二分查找
/**
* 二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
*
* @param array
* 有序数组 *
* @param searchKey
* 查找元素 *
* @return searchKey的数组下标,没找到返回-1
*/
public static int binarySearch(int[] array, int searchKey) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int middle = (low + high) / 2;
if (searchKey == array[middle]) {
return middle;
} else if (searchKey < array[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}
3.分块查找
a. 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的(假设这种排序是按关键字值递增的,也就是说在第一块中任意一个数据元素的关键字都小于第二块中所有数据元素的关键字,第二块中任意一个数据元素的关键字都小于第三块中所有数据元素的关键字,依次类推);
b. 建立一个索引表,把每块中最大的关键字值按块的顺序存放在一个辅助数组中,这个索引表也按升序排列;
c. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在哪个块中,查找方法既可以是折半方法,也可以是顺序查找。
d. 再到相应的块中顺序查找,便可以得到查找的结果。
/**
* 分块查找
*
* @param index
* 索引表,其中放的是各块的最大值
* @param st
* 顺序表,
* @param key
* 要查找的值
* @param m
* 顺序表中各块的长度相等,为m
* @return
*/
public static int blockSearch(int[] index, int[] st, int key, int m) {
// 在序列st数组中,用分块查找方法查找关键字为key的记录
// 1.在index[ ] 中折半查找,确定要查找的key属于哪个块中
int i = binarySearch(index, key);
if (i >= 0) {
int j = i > 0 ? i * m : i;
int len = (i + 1) * m;
// 在确定的块中用顺序查找方法查找key
for (int k = j; k < len; k++) {
if (key == st[k]) {
System.out.println("查询成功");
return k;
}
}
}
System.out.println("查找失败");
return -1;
}
4.哈希查找
哈希表查找是通过对记录的关键字值进行运算,直接求出结点的地址,是关键字到地址的直接转换方法,不用反复比较。假设f包含n个结点,Ri为其中某个结点(1≤i≤n),keyi是其关键字值,在keyi与Ri的地址之间建立某种函数关系,可以通过这个函数把关键字值转换成相应结点的地址,有:addr(Ri)=H(keyi),addr(Ri)为哈希函数。
解决冲突的方法有以下两种:
(1)开放地址法
如果两个数据元素的哈希值相同,则在哈希表中为后插入的数据元素另外选择一个表项。当程序查找哈希表时,如果没有在第一个对应的哈希表项中找到符合查找要求的数据元素,程序就会继续往后查找,直到找到一个符合查找要求的数据元素,或者遇到一个空的表项。
(2)链地址法
将哈希值相同的数据元素存放在一个链表中,在查找哈希表的过程中,当查找到这个链表时,必须采用线性查找方法。
/****
* Hash查找
*
* @param hash
* @param hashLength
* @param key
* @return
*/
public static int searchHash(int[] hash, int hashLength, int key) {
// 哈希函数
int hashAddress = key % hashLength;
// 指定hashAdrress对应值存在但不是关键值,则用开放寻址法解决
while (hash[hashAddress] != 0 && hash[hashAddress] != key) {
hashAddress = (++hashAddress) % hashLength;
}
// 查找到了开放单元,表示查找失败
if (hash[hashAddress] == 0)
return -1;
return hashAddress;
}
/***
* 数据插入Hash表
*
* @param hash
* 哈希表
* @param hashLength
* @param data
*/
public static void insertHash(int[] hash, int hashLength, int data) {
// 哈希函数
int hashAddress = data % hashLength;
// 如果key存在,则说明已经被别人占用,此时必须解决冲突
while (hash[hashAddress] != 0) {
// 用开放寻址法找到
hashAddress = (++hashAddress) % hashLength;
}
// 将data存入字典中
hash[hashAddress] = data;
}
分享到:
相关推荐
校园疫情防护知识培训
COMSOL模拟下的卡门涡街发电系统模型研究与应用,COMSOL卡门涡街发电模型:探究流体动力学与能源转换的融合机制,COMSOL卡门涡街发电模型 ,COMSOL; 卡门涡街; 发电模型; 核心关键词,COMSOL 下的卡门涡街发电模型研究
微控制器 (MCU) 是单个集成电路上的小型计算机,旨在控制电子系统内的特定任务。它将中央处理器 (CPU)、内存和输入/输出接口的功能全部集成在一个芯片上。 微控制器广泛用于嵌入式系统,例如家用电器、汽车系统、医疗设备和工业控制系统。它们还用于消费电子产品,例如游戏系统、数码相机和音频播放器。 典型的微控制器由处理器内核、易失性和非易失性存储器、输入/输出外设和各种通信接口组成。处理器内核负责执行指令和控制微控制器的其他组件。存储器用于存储数据和程序代码,而 input/output 外设用于与外部环境交互。 微控制器是可编程的,这意味着它们可以进行定制以执行特定任务。用于为微控制器编写代码的编程语言因制造商和微控制器类型而异。一些常用的编程语言包括 C、C++ 和汇编语言。 微控制器是可在嵌入式系统中使用的独立桌面。一些微控制器可能以 clock rate 速率运行并使用 4 位表达式。由于它们控制的许多设备都是电池供电的,因此微控制器通常必须是低功耗的。微控制器广泛应用于各种产品中,包括消费电子产品、汽车发动机、计算机外围设备以及测试和测量设备。这些也非常适合长期电池使用
Wincc高级报表工具:自定义模板,多格式输出与打印预览功能全解析,Wincc高级报表工具:自定义模板,多功能打印预览与导出,支持PDF打印及Excel表格导出,显示统计数据,兼容多种版本使用。,wincc高级报表,支持自定义模版,支持打印预览,支持打印PDF,支持导出Excel表格,支持自定义打印区域,可显示最大值,最小值,平均值,可求和。 可以在wincc7.4 7.5 8.0,博图wincc上使用。 ,wincc高级报表; 自定义模板; 打印预览; 打印PDF; 导出Excel; 自定义打印区域; 显示最大值/最小值/平均值; 求和; wincc7.4-8.0; 博图wincc。,Wincc高级报表:全功能自定义,打印、预览、PDF、Excel输出工具
电机控制算法中的死区补偿技术详解视频教程,电机控制算法之死区补偿策略深度解析视频教程,电机控制算法之死区补偿视频教程 ,电机控制; 死区补偿; 视频教程,电机控制算法死区补偿视频教程
使用 Python 学习数据科学教程
Qt CPPO优化的高效多能表格小部件——适用于工业级应用的强大Excel类程序,基于Qt CPP的高性能多功能表格小部件:工业级应用之首选,Qt CPP实现的高性能表格小部件。 是功能齐全的高性能表格小部件,适用于工业强度的应用程序。 它采用了模型视图控制器架构,因此多个表小部件可以显示相同的数据。 小部件具有广泛的打印功能,包括以与屏幕上的表格显示不同的视觉特征打印表格的功能。 一个功能强大高性能的类似excel表格程序。 支持合并单元格,查找替,打印预览,分页,字体加颜色,粗体,单元格边线,字体大小,撤销前进,背景颜色等功能。 源码: 使用Qt5.13.1_MinGW、Qt5.15.1_MinGW编译通过,其他版本请自行尝试。 ,核心关键词: Qt CPP; 高性能表格小部件; 工业强度应用; 模型视图控制器架构; 打印功能; Excel类似功能; 源码兼容Qt5.13.1_MinGW; Qt5.15.1_MinGW。,Qt C++高性能多功能表格控件
PFC2D云图绘制技术与实现:以鱼式数据导出为基础,运用MATLAB进行高精度图谱绘制,适应各种不规则模型与含空洞模型的绘图需求,利用PFC2D云图绘制技术:导出数据至Matlab绘图平台,实现不规则模型(含孔洞)可视化分析,pfc2d云图绘制。 使用fish将数据导出后,用matlab画图。 适用于各种不规则的模型,例如模型中存在孔洞。 ,pfc2d云图绘制; 数据导出; Matlab画图; 不规则模型; 孔洞处理,Matlab绘制PFC2D云图:不规则模型孔洞处理
山峰图,折线图,基本时序图,区域图,饼状图,环形图,圆弧进度条,多边形雷达图,仪表盘;适用uni-app,小程序端,android端,iOS端,鸿蒙app,前端,微信小程序,支付宝小程序,快手小程序,抖音小程序等
STM32 NUCLEOH753ZI FreeRTOS + UDP 基于 | CubeIDE |1.17.0 | | Firmware Package Name and Version |STM32Cube FW_H7 **V1.12.1** | |板子|NUCLEO-H753ZI| 查看配套教程:https://blog.csdn.net/Jobs_ZhaoCB/article/details/145631105?fromshare=blogdetail&sharetype=blogdetail&sharerId=145631105&sharerefer=PC&sharesource=Jobs_ZhaoCB&sharefrom=from_link
2024免费毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 技术栈:Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode。
永磁同步电机多参数高精度辨识仿真研究:电阻、电感、磁链全面解析,永磁同步电机多参数高精度辨识仿真研究:电阻、电感、磁链全面解析,永磁同步电机多参数辨识仿真【电阻、电感、磁链】 [1]定子辨识原理:通过施加固定脉冲的占空比,测量电流及电压,计算定子电阻 [2]电感辨识原理:① 分别施加三组脉冲,测试获得线电感Lab、Lbc、Lca; ② 根据线电感以及角度,计算Ld及Lq; [3]磁链辨识原理:采用转速、电流双闭环控制,其中D轴给定固定电流,转速设定为额定转速50%左右 [hot] (1)定子电阻辨识:精度在0.1%左右 (2)DQ电感辨识:采用脉冲电压法,精度在0.02%左右 (3)转子磁链辨识:精度在0.12%左右; 2018b版本 ,定子电阻辨识;电感辨识;磁链辨识;脉冲电压法;精度,基于多参数的永磁同步电机辨识仿真:电阻、电感及磁链精确辨识方法
基于Comsol的工件感应加热仿真计算模型:多物理场耦合的电磁热分析与温度场分布研究,Comsol工件感应加热仿真模型:电磁热多物理场耦合计算揭秘温度场与电磁场分布,Comsol工件感应加热仿真计算模型,采用温度场和电磁场耦合电磁热多物理场进行计算,可以得到计算模型的温度场和电磁场分布 ,Comsol;感应加热;仿真计算模型;温度场;电磁场;耦合电磁热多物理场;温度场分布,Comsol仿真计算模型:多物理场耦合感应加热的温度与电磁场分布
永磁同步电机PMSM矢量控制仿真模型:负载波动下的稳定转速电流跟随与SVPWM实现原理详解,永磁同步电机PMSM矢量控制仿真模型:助力新人快速掌握转速与电流控制,理解SVPWM原理,带位置传感器仿真指导,参数计算精准便捷,永磁同步电机PMSM矢量控制仿真,该模型可以指导新人快速入门,了解各个控制环节的波形及搭建方法。 波形见附图,可见在负载波动情况下转速及电流跟随稳定; 模型可助于理解转速及电流环路设计; 模型可助于理解svpwm实现原理; 模型内提供参数计算方法,不用经验值整定; 带位置传感器矢量控制仿真; 可以简单; ,关键词:永磁同步电机; 矢量控制仿真; 波形; 负载波动; 转速; 电流环路设计; SVPWM实现原理; 参数计算方法; 位置传感器。,PMSM矢量控制仿真模型:轻松理解SVPWM与位置传感控制,快速入门之必备工具
团队合作培训课件
基于Simulink的永磁同步电机发电仿真控制模型及其双类型模型结构研究,基于永磁同步电机的发电仿真控制及其Simulink模型构建,永磁同步电机发电仿真控制simulink模型。 邮箱发送。 模型包括两种。 ,永磁同步电机; 发电仿真; 控制; Simulink模型; 邮箱发送; 模型多样性; 两种模型;,Simulink模型在永磁同步电机发电仿真控制中的应用研究
二手手机回收平台系统
本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。
Buck-Boost双向DC-DC电源技术详解:基于STM32F334C8T6的自动切换稳压输出学习资料集,基于STM32F334C8T6芯片的Buck-Boost双向DC-DC电源全套学习资料:从原理到实战,涵盖AD原理图、程序源码、仿真模型与硬件设计报告,Buck-Boost双向DC-DC电源整套学习资料 功能:采用STM32F334C8T6芯片,能够根据输入电压和输出电压的大小关系,实现自动切工作模式,将参数信息进行显示,并且可以实现稳压输出。 程序+仿真+硬件软件说明报告+原理图+计算书等等 详细资料内容包括: (1)AD原理图:主电路原理图、辅助电源电路、信号调理与滤波电路、控制器电路等 (2)程序源码:三套程序(Buck模式、Boost模式、Buck-Boost模式),具有软起动、完整的短路保护,过流保护,输出过压保护,输入过压欠压等保护功能 (3)仿真模型:使用PSIM搭建,包括开环和闭环程序,PI控制参数可以参考数字环路设计计算书。 (4)Word硬件设计报告:包括电路参数设计、器件选型、原理分析等等 (5)代码计算书:电压电流采样计算、短路保护计算等等 (6)Word
基于STM32F405的HFI高频方波注入与无感FOC控制方案:永磁同步电机零速带载启动与全速域运行技术,STM32F405实现的无感FOC控制及HFI高频方波注入方案:零速启动、永磁同步电机控制,全速域运行,代码全C语言,含详细开发资源,HFI高频方波注入方案stm32f405 无感FOC控制 直接闭环启动 永磁同步电机无感控制,0速带载启动,堵转保持扭矩 低速HFI, 高速SMO,全速域运行。 基于stm32f405。 高频注入零速启动三步走: 1 .先是高频注入,角度估算收敛。 2.脉冲NS磁极辨识。 3 .角度,速度双闭坏零速启动运行。 包括完整的cubemx配置文件,mdk工程,原理图和开发笔记,初始角度检测仿真,代码全C语言,宏定义选项均有中文注释,方便我植到自己的项目中。 内涵升级版hfi程序和新的foc程序框架,新版hfi程序速度波动更小。 ,关键词: HFI高频方波注入; stm32f405; 无感FOC控制; 直接闭环启动; 永磁同步电机无感控制; 零速启动三步走; 脉冲NS磁极辨识; 速度波