java数组查找方法(二分查找,顺序查找、插值查找法)

文章目录

  • 前言
  • 一、二分查找法
  • 二、顺序查找法
  • 三、插值查找法
  • 总结

前言

查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。本文介绍Java数组中三种常见的查找算法,二分查找/折半查找、顺序查找、插值查找,并且提供相应的Java代码实现。

一、二分查找法

每次取中间记录查找的方法叫做二分查找。二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
基本思路:在有序表中,取中间记录作为比较对象,用给定值先与中间记录做比较
如果相等,说明查找成功,
如果给定值小于中间记录,说明要查找的数字在中间记录的左边
如果给定值大于中间记录,说明要查找的数字在中间记录的右边

代码如下(示例):

 int min = 0;int max = array.length -1;while(min <= max) {//获取中间值的下标int middle = (min + max) / 2;//将要查找的数字与中间值做比较if(num > array[middle]) {min = middle +1;}else if(num < array[middle]) {max = middle -1;
}else {
return middle;
}
}

二、顺序查找法

顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,顺序查找非常简单,就是从头开始遍历内部数组,查看有没有要查的给定值,有的话就返回对应的索引。

代码如下(示例):

 for(int i = 0; i < array.length; i++) {if(array[i] == num){//如果数据存在		 return i;//返回数据所在的下标,也就是位置		 
}		 
} 

三、插值查找法

插值查找(Interpolation Search),有序表的一种查找方式, 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
查找公式:
mid=low+(num-array[low])/(array[high]array[low])*(high-low),

代码如下(示例):

int low = 0;int high = array.length - 1;
int mid;
//不在范围内,直接返回-1if (array[low] > num || array[high] < num) {return -1;}//开始插值查找while (low <= high) {//插值
mid = low + (high - low) * (num - array[low]) / (array[high] - array[low]);/*若查找值比中值小*/if (array[mid] > num) {//最高下标调整到中位下标小一位high = mid - 1;/*若查找值比中值大*/} else if (array[mid] < num) { //最低下标调整到中位下标大一位low = mid + 1;//若查找值等于中值} else {//说明mid即为查找到的位置
return mid;}}

总结

以上就是今天要讲的关于Java数组查找方法内容。
获取更完整的查找代码:https://download.csdn.net/download/weixin_43516258/89286263

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui- button按钮自适应大小

<el-button type"primary" class"daochu" click"download">导出</el-button> .daochu {width: calc(100vw * 80 / 1920);height: calc(100vw * 30 / 1920);font-size: calc(100vw * 13 / 1920); } 效果图&#xff1a;

做一个属于自己的软件-pyside6快速上手教程

首先环境需要安装python3和pip&#xff0c;软件使用pycharm&#xff0c;安装也都很简单 首先需要安装pyside6,在终端执行&#xff1a; pip install pyside6 然后进入可视化编辑界面 pyside6-designer 进入后创建即可 可以从左侧点击鼠标拉组件进入到中间的工作区&#xff…

android基础-服务

同样使用intent来传递服务 oncreate是服务第一次启动调用&#xff0c;onStartCommand是服务每次启动的时候调用&#xff0c;也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。 服务生命周期 前台服务类似于通知会…

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么&#xff1f;2.2 Baidu Comate 支持那…

FANUC机器人工具坐标偏移的用法

一、工具坐标偏移的使用场景 在机器人位置不改变的情况下&#xff0c;工业机器人使用默认工具坐标系示教的一系列运动点位&#xff0c;要保持原本点位位置不变的情况下&#xff0c;改变机器人工具坐标的参数&#xff0c;就要用到机器人坐标转化的功能。在FANUC机器人上体现为机…

Vue10 组件通信-插槽

插槽 分成三种&#xff1a;默认插槽、具名插槽、作用域插槽 默认插槽 父组件father.vue <template><div class"father"><h3>父组件</h3><div class"content"><Category title"热门游戏列表"><ul>…

OSPF综合实验(超详细易懂)(HCIP)

1、拓扑信息 2、需求分析 3、IP规划 4、配置 5、测试 1、拓扑信息 2、需求分析 R4为ISP&#xff0c;其上只能配置I地址&#xff1b; R4与其他所有直连设备间均使用公…

【Linux系列】tail查询使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

在数字化时代保持企业财务管理的持续技术创新

根据全球市场调查&#xff0c;在现阶段企业如果还不更新自身的商业运作模式&#xff0c;企业的业务可能会一点一点丧失市场竞争力。技术进步是所有行业发展的明显趋势。许多年轻的初创企业具有创新管理思维、精益求精的决策流程和现代化的商业基础设施&#xff0c;这些顺应时代…

转行网络安全的重要建议,助你顺利入门

目录 为什么写这篇文章 为什么我更合适回答这个问题 先问自己3个问题 1.一定要明确自己是否是真喜欢&#xff0c;还是一时好奇。 2.自学的习惯 3.选择网安、攻防这行的目标是什么&#xff1f; 确认无误后&#xff0c;那如何进入这个行业&#xff1f; 1.选择渗透测试集中…

重生奇迹mu烈火剑带什么技能

在重生奇迹mu游戏中&#xff0c;35级是每个职业的分水岭&#xff0c;只要到了35级&#xff0c;三职业都可以学习自己的高级技能&#xff0c;道士可以召唤自己的大狗&#xff0c;法师拥有冰咆哮&#xff0c;战士就是咱们今天要说的烈火剑法&#xff0c;这三种技能都需要玩家自己…

Python: 日期和时间格式化

from datetime import datetime# 获取当前时间 current_time datetime.now() print(f"current_time {current_time}")# yyyymmdd format_date current_time.strftime("%Y%m%d") print(f"format_date {format_date}")# yyyy-mm-dd format_dat…

【android 更改三方相机配流size】

前言 强制修改三方相机配流size, 拍照和预览都可以 声明&#xff1a; 本帖用的是安卓开源代码&#xff1a; http://aospxref.com/android-14.0.0_r2/xref/frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp#867 修改方案 867 binder::Status C…

Chromium 调试指南2024 Windows11篇-安装代码编辑器VSCode(三)

1. 前言 在进行Chromium项目的开发和调试之前&#xff0c;安装适合的代码编辑器是至关重要的一步。本文将介绍如何安装Visual Studio Code&#xff0c;这是一个功能强大且广受开发者欢迎的代码编辑器。通过正确安装Visual Studio Code&#xff0c;我们将为后续的Chromium代码编…

张驰咨询六西格玛黑带培训,上海开班,质量精英的摇篮!

一、课程背景与意义 在当今竞争激烈的市场环境中&#xff0c;企业要想立于不败之地&#xff0c;就必须不断提升自身的核心竞争力。而六西格玛作为一种先进的质量管理工具和方法&#xff0c;已经被越来越多的企业所采纳。通过六西格玛黑带培训&#xff0c;学员们可以系统地掌握…

Windows上安装Seata服务

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Seata 是一款开源的…

什么是MTC证书?清关为什么要提交MTC?

一、MTC认证的定义 MTC认证是一种由供应商、制造商或第三方实验室提供的认证&#xff0c;用于证明材料的质量和符合特定标准或规格的要求。它包括详细的材料信息、化学成分、机械性能测试结果和符合性声明等内容&#xff0c;为确保材料质量提供了有力的证据和保障。 二、MTC证书…

IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案

背景 IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案 原因 由于SpringBoot3.x.x版本的到来&#xff0c;官方称将来17及以上版本将成为主流&#xff0c;但是大多数的项目仍然使用JDK8。 1.解决方案一 将https://start.spring.io/或者http://start.springboot.io/替…

Linux系列---【使用lvm对xfs类型逻辑卷进行缩容】

使用lvm对xfs类型逻辑卷进行缩容 1.确定需要缩容的逻辑卷的类型是否是xfs df -Th 2.备份逻辑卷对应的目录原数据 # /tmp/home.dump:为备份后存放的位置&#xff0c;/home&#xff1a;为需要备份的目录 xfsdump -f /tmp/home.dump /home # 1.输入session名:home_session # 2.输入…

MBR与GPT分区表

文章目录 MBR分区表MBR分区表结构MBR分区表项查看U盘的分区表信息查看系统中所有磁盘的分区类型获取分区表信息 GPT分区表保护性MBRGPT分区表头格式GPT分区表项格式分区类型分区属性分区表项内容 MBR分区表 CHS &#xff1a;磁头&#xff08;Heads&#xff09;、柱面(Cylinder…