【Java】—— 数组元素的查找:顺序查找与二分查找

news2024/9/23 1:23:40

目录

1、顺序查找

2、二分查找


1、顺序查找

        在Java编程中,我们经常需要查找数组中某个元素的下标。有时,我们需要找到该元素第一次出现的位置,而有时则需要找到最后一次出现的位置。在本文中,我们将重点介绍如何查找元素第一次出现的位置。

顺序查找:挨个查看

要求:对数组元素的顺序没要求

public class TestArrayOrderSearch {
    //查找value第一次在数组中出现的index
    public static void main(String[] args){
        int[] arr = {4,5,6,1,9};
        int value = 1;
        int index = -1;

        for(int i=0; i<arr.length; i++){
            if(arr[i] == value){
                index = i;
                break;
            }
        }

        if(index==-1){
            System.out.println(value + "不存在");
        }else{
            System.out.println(value + "的下标是" + index);
        }
    }
}

2、二分查找

要求对数组必须是有序的。

举例:

实现步骤:

在Java中,我们可以使用二分查找法来查找有序数组中的目标元素。以下是一个简单的示例代码:

public class Test {

    public static void main(String[] args) {

        // 二分查找法:要求此数组必须是有序的
        int[] arr = new int[]{-99,-54,-2,0,0,33,43,256,999};
        boolean isFlag = true;
        // 定义一个变量,要查找的数值
        int value = 256;
        int head = 0;   // 首索引的位置
        int end = arr.length-1; // 尾索引的位置
        while (head<=end){
            // 找出中间索引,匹配值是否与目标值一致,如一致,middle既是目标值的索引
            int middle = (head+end)/2;
            if (arr[middle]== value){
                System.out.println("找到指定的元素,索引为:" + middle);
                isFlag = false;
                break;
            }else if (arr[middle]>value){
                // 中间值比目标值大,在小的范围继续二分查找
                end = middle-1;
            }else{
                // 中间值比目标值小,在大的范围继续二分查找
                head = middle+1;
            }
        }

        if (isFlag){
            System.out.println("未找到指定的元素");
        }
        
    }
}

        在循环中,我们计算中间索引middle,并检查该索引处的值是否等于目标值。如果相等,说明找到了目标元素,输出其索引并跳出循环。如果中间值大于目标值,说明目标值位于左半部分,我们将end指针移动到middle-1。反之,如果中间值小于目标值,说明目标值位于右半部分,我们将head指针移动到middle+1

head大于end时,说明整个数组都已经搜索完毕,但仍未找到目标值。此时,我们输出“未找到指定的元素”。

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

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

相关文章

AI依赖的隐患:技术能力退化、安全风险与社会不平等的未来

现代科技的浪潮中&#xff0c;ChatGPT等人工智能工具已经成为我们工作和生活的得力助手。然而&#xff0c;当这种便利变成了依赖&#xff0c;潜在的风险开始显现。过度依赖AI不仅可能导致技术能力的严重退化&#xff0c;还可能加剧信息安全问题和社会不平等。让我们深度剖析这三…

智慧社区信息系统建设:数据可视化与原型设计的力量

在数字化浪潮的推动下&#xff0c;智慧社区作为城市治理现代化的重要一环&#xff0c;正以前所未有的速度改变着我们的生活方式。智慧社区信息系统&#xff0c;作为支撑这一变革的核心&#xff0c;不仅要求高效的数据处理能力&#xff0c;还需具备直观的数据展示与强大的用户交…

zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题 1、封装API2、有账号密码3、查询所有有效的具体数据&#xff0c;也就是缓存的所有字段 封装查询所有有效具体数据的方法 基本封装 def get_all(self, is_activeTrue, limit100000):"""遍历数据库中所有的key&#xff0c;默认查询所有没过期的:para…

服务器数据恢复—重建RAID失败导致数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windows server&#xff0c;运行了一个单节点Oracle&#xff0c;数据存储为文件系统&#xff0c;无归档。该oracle数据库的数据量不大&#xff0c;oracle数据库内只有一…

【SpringBoot】电脑商城-08-新增收获地址

新增收货地址 1 新增收货地址-创建数据表 1.使用use命令先选中store数据库。 USE store; 2.在store数据库中创建t_address用户数据表。 CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收货地址id,uid INT COMMENT 归属的用户id,name VARCHAR(20) COMMENT 收货人…

Oracle Linux 7.9 安装minikube体验

1.环境信息 前置所需&#xff1a; 操作系统&#xff1a;Oracle Linux 7.9 虚拟机配置&#xff1a;CPU:4核 内存&#xff1a;4G 容器&#xff1a;docker 26.1.4 安装minikube后环境&#xff1a; minikube: v1.33.1 kubernetes:v1.23.3 minukube体验说明&#xff1a;使用Virtua…

vs code中编写html的配置,插件安装

首先安装vs code 插件安装下面三个&#xff1a; 功能分别是&#xff1a; html css support &#xff1a;就是支持html环境&#xff0c;因为vs code就是一个文本编辑器 live server&#xff1a;自动更新编写的文件在浏览器刷新 auto rename tag&#xff1a;自动修改另一半标签…

火语言RPA流程组件介绍--获取/结束进程

&#x1f6a9;【组件功能】&#xff1a;获取整个进程列表&#xff0c;或者根据进程名/进程ID获取或结束指定的进程 配置预览 配置说明 查找方式 进程名&#xff1a;进程的名称。 进程ID&#xff1a;进程ID标识。 所有进程列表&#xff1a;返回所有当前系统运行的所有进程列表…

Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法 在创建的 Vue 应用程序实例中&#xff0c;可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法&#xff0c;因此可以像访问 data 数据那样来调用方法。 【实例】在 Vue 应用程序中&#xff0c;使用 methods 选项定义获取用户信…

JLMSR超分算法说明和效果

一、简介 JLMSR是基于加权概率模型构造的一种超分算法&#xff0c;属于传统超分&#xff0c;无需训练&#xff0c;适合硬件化。与传统超分的插值方案最大区别在于基于16*16的块进行上下文概率统计&#xff0c;结合权重进行插值。目前该插值方案已经线性化和整数化&#xff0c;…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps&#xff08;开发者安全运营&#xff09;是指将安全最佳实践融入软件开发生命周期的过程&#xff0c;从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局&#xff1a;DevSecOps市场竞争激烈。该领域有数百家供应商提供工具&#xff0c;帮助组织…

能实现可算不可见的同态加密技术详解

目录 同态加密的基本概念 同态加密示例 同态加密的原理 同态加密的类型 同态加密的应用场景 同态加密的挑战 小结 同态加密&#xff08;Homomorphic Encryption&#xff0c;HE&#xff09;是一种满足密文同态运算性质的加密算法&#xff0c;可以在加密数据上直接执行特定…

【C++ Primer Plus习题】4.8

问题: 解答: #include <iostream> #include <string> using namespace std;typedef struct _Pizza {string companyName;float diameter;float wieght; }Pizza;int main() {Pizza *pnew Pizza;cout << "请输入披萨的直径: ";cin >> p->d…

如何定义、注册以及什么是异步组件?

一. 如何定义异步组件 定义异步组件需要使用vue提供的 defineAsyncComponent() 方法&#xff1a; 注意&#xff1a;通过观察大家也可以发现&#xff0c;所谓的异步组件就相当于给普通组件套了一层外壳(defineAsyncComponent()),当然现在还不能感受到异步组件的魅力&#xff0c…

大模型入门到精通——Prompt Engineering工程

Prompt Engineering 1. Prompt Engineering 的意义 在 LLM&#xff08;大语言模型&#xff09;时代&#xff0c;Prompt Engineering&#xff08;提示工程&#xff09;已经成为开发者与用户的重要技能和概念。随着大模型&#xff08;如 GPT、GLM、BERT 等&#xff09;的快速发…

Windows SDK(九)登录框和计算器练习

这节课我们分别开始讲解登录框和计算机的实现 登录框实现 我们以上节课所学&#xff0c;自行创建一个对话框&#xff0c;ID为IDD_DIALOG1并将他编辑为一个登录框的样式。其中我们将账户的编辑框ID设置为IDC_ENIT_USERNAME&#xff0c;密码的编辑框ID设置为IDC_ENIT_PASSWORD。…

tm和r商标哪个最放心用!

有个网友联系普推知产老杨&#xff0c;问申请的商标可以授权使用不&#xff0c;这个没有下商标注册证&#xff0c;基本上没多大用&#xff0c;申请的商标也可以授权&#xff0c;但是由于该商标尚未获得注册&#xff0c;其权利状态尚不稳定会存大许多风险。 TM基本是下受理书后的…

MySQL 主从复制的两种方式详解

目录 概述 主从复制原理 环境准备 基于二进制日志的复制 配置master 配置slave 启动复制的命令 测试 Gtid方式进行主从同步 工作原理 配置master 配置slave 测试 概述 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后…

初识C语言指针(4)

目录 1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. typedef 关键字 6. 函数指针数组 结语 1. 字符指针变量 字符指针变量就是存储字符或字符串首字符地址的变量&#xff0c;字符指针变量有2种使用方式。 最常用的使用方式&#xff1a…

pikachu-ssrf_redis

目录 SSRF 1、SSRF漏洞介绍&#xff1a; 2、SSRF漏洞原理&#xff1a; 3、SSRF漏洞利用手段&#xff1a; 4、SSRF漏洞绕过方法&#xff1a; SSRF(curl)用法 1、通过网址访问链接 2、利用file协议查看本地文件 3、dict协议扫描内网主机开放端口 4.gopher&#xff1a;威…