当前位置: 首页 > news >正文

数组相关简单算法

目录

 1. 数据结构与算法

2. 数组中涉及的算法

2.1

2.2 数值型数组相关运算

 2.3 数组赋值

2.4 数组复制/反转

2.5 数组查找

 2.6 排序


 1. 数据结构与算法

《数据结构与算法》是大学些许专业的必修或选修课,主要包含两方面知识:

(1)数据与数据之间的逻辑关系:

集合,一对一,一对多,多对多;

(2)数据的存储结构:

集合结构:

线性结构:顺序表,链,栈,队列;

树形结构:二叉树

图状结构:

2. 数组中涉及的算法

(1)数组元素的赋值(杨辉三角,回形数等);

(2)求数值型数组的最大值,最小值,和以及平均数;

(3)数组的复制,反转,查找(线性查找,二分法查找);

(4)数组元素的排序算法;

算法的五大特性:

2.1

创建一个长度为 6 的 int 型数组,要求取值为 1-30,同时元素各不相同;

2.2 数值型数组相关运算

定义一个 int 型的一维数组,包含 10 个元素,分别赋一个两位数的随机整数,求出所有元素的最大值,最小值,和以及平均值;

class suanShu {public static void main(String[] args) {int [] a = new int [10];for(int i = 0;i < a.length;i++){a[i] = (int)(Math.random()*100);System.out.print(a[i]+" ");if(i==a.length-1){System.out.println(" ");}}int max = a[0] ;int min = a[0];int sum = 0;for(int i = 0;i < a.length;i++){if(max < a[i]){max = a[i];}if(min > a[i]){min = a[i];}sum += a[i];}System.out.println("最大值为:"+max);System.out.println("最小值为:"+min);System.out.println("和值为:"+sum);System.out.println("平均值为:"+(sum / a.length));}
}
 2.3 数组赋值

class ArrayExer2 {public static void main(String[] args){int array1[],array2[];//优化array1 = new int[]{2,3,5,7,11,13,17,19};for(int i = 0;i < array1.length;i++){System.out.print(array1[i]+" ");if(i==array1.length-1){System.out.println(" ");}}array2 = array1;for(int i = 0;i < array2.length;i++){if(i % 2 == 0){array2[i] = i;}}for (int i = 0;i < array1.length;i++){System.out.print(array1[i]+" ");}}
}

 注意:array1 与 array2 的地址值相同,都指向堆内存中的同一数组; 

2.4 数组复制/反转
//数组的复制/反转
class complex {public static void main(String[] args){String[] str = new String[]{"11","22","33","44","55","66","77"};String[] str1;str1 = new String[str.length];//堆中新开辟空间/*区别于数组的赋值int array1[],array2[];array1 = new int[]{2,3,5,7,11,13,17,19};array2 = array1;*/for(int i = 0;i < str.length;i++){str1[i] = str[i];System.out.print(str1[i]+" ");if(i == str.length-1){System.out.println(" ");}}//       数组反转for (int i = 0;i < str1.length / 2;i++){String temp ;temp = str1[i];str1[i] = str1[str.length-i-1];str1[str.length-i-1] = temp;}for(int i=0;i < str1.length;i++){System.out.print(str1[i]+" ");}}
}
2.5 数组查找

(1) 线性查找;

//数组线性查找
class Select{public static void main(String[] args){String[] arr = new String[]{"1","3","5","7","9","11","13","15","17","19"};String dest = "19";boolean isFlag = true;for (int i = 0;i < arr.length;i++){if(dest.equals(arr[i])){System.out.println("索引为:"+i);isFlag = false;break;}}if(isFlag){System.out.println("很遗憾,没有查找到该数据");}}
}

 (2)二分法查找;

前提:排序;

适用于大量数据

如下:在整型一维数组 a 中查找 b 的位置;

class devideS{public static void main(String[] args){int[] a = new int[]{1,3,5,7,9,11,13,15,17,19,22};int b = 17;int head = 0;int end = a.length-1;boolean isfact = true;while(head <= end){int middle = (head + end) / 2;if(a[middle] == b){System.out.println("该元素地址为:" + middle);isfact = false;break;}else if(a[middle] < b){head = middle + 1;}else if(a[middle] > b){end = middle - 1;}}if(isfact){System.out.println("很抱歉,没有找到的啦!");}}
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
 2.6 排序

1. 内部排序:在内存中完成的排序算法(10种)

选择排序:直接选择排序,堆排序

交换排序:冒泡排序,快速排序

插入排序:直接插入排序,折半插入排序,Shell排序

归并排序;

桶式排序;

基数排序;

2. 外部排序:借助外部存储设备完成的排序

冒泡排序(平均时间复杂度:O(n2)):

class MP{
//    5 30  15  2
//    第一轮: 5  15  2   30    交换三次
//    第二轮: 5  2   15  30    交换二次
//    第三轮: 2  5   15  30    交换一次    排序完毕public static void main(String[] args){int[] a = new int[]{1,5,14,9,2};
//        n个数(n-1)轮即可排完for(int i = 0;i < a.length - 1;i++){
//            每轮都会沉底一个较大数,交换次数会减少for(int j = 0;j < a.length - 1 - i;j++){int temp = 0;if(a[j] < a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}for(int i = 0;i < a.length;i++){System.out.print(a[i] + " ");}}
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 快速排序,归排序,堆排序用前突击即可,想要做到和以上算法一样熟悉,需要经过一定的练习,因此本文暂时并不提供这三种算法的相关知识。

相关文章:

数组相关简单算法

目录 1. 数据结构与算法 2. 数组中涉及的算法 2.1 2.2 数值型数组相关运算 2.3 数组赋值 2.4 数组复制/反转 2.5 数组查找 2.6 排序 1. 数据结构与算法 《数据结构与算法》是大学些许专业的必修或选修课&#xff0c;主要包含两方面知识&#xff1a; &#xff08;1&#…...

在VBA中结合正则表达式和查找功能给文档添加交叉连接

在VBA中搜索文本有两种方式可用&#xff0c;一种是利用Range.Find对象&#xff08;更常见的形式可能是Selection.Find&#xff0c;Selection是Range的子类&#xff0c;Selection.Find其实就是特殊的Range.Find&#xff09;&#xff0c;另一种方法是利用正则表达式&#xff0c;但…...

动手学深度学习-多层感知机-7前向传播、反向传播和计算图

目录 前向传播 前向传播计算图 反向传播 训练神经网络 小结 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时&#xff0c;我们只考虑了通过前向传播&#xff08;forward propagation&#xff09;所涉及的计算。 在计算梯度时&#xff0c;我们只调用…...

【Python】基于Python的CI/CD工具链:实现自动化构建与发布

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,持续集成(CI)和持续交付(CD)已经成为提高开发效率和软件质量的重要实践。CI/CD流程帮助开发团队自动化构建、测试、…...

FPGA-PS端编程1:

目标 在小梅哥的zynq 7015上&#xff0c;完成以下目标&#xff1a; 读取 S1 按键的电平&#xff0c; 当 S1 按键为按下状态时&#xff0c;驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别)&#xff0c; 当 S1 释放后&#xff0c;停止…...

自制数据库迁移工具-C版-06-HappySunshineV1.5-(支持南大Gbase8a、PostgreSQL、达梦DM)

目录 一、环境信息 二、简述 三、架构图 四、升级点 五、支持功能 六、后续计划支持功能 七、安装包下载地址 八、配置参数介绍 九、安装步骤 1、用户创建 2、安装包解压 3、环境变量配置 4、环境变量生效 5、动态库链接检验 &#xff08;1&#xff09;HsManage…...

了解RPC

本文来自智谱清言 --------- RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种允许程序调用位于远程计算机上的子程序或服务的技术。这种技术使得构建分布式计算变得更加容易&#xff0c;因为它提供了强大的远程调用能力&#xff0c;同时保持…...

centos7 安装docker

文章目录 介绍docker特点安装1.前提准备2.下载1.移除旧版docker命令2.切换centos7的镜像源3.配置docker yum源4.安装最新docker5.输入命令验证docker 安装是否成功6.配置docker 镜像加速7.设置为开机自启 总结 介绍 ‌Docker‌是一种开源的容器化平台&#xff0c;旨在简化应用…...

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能&#xff08;AI&#xff09;项目的开发和部署过程中&#xff0c;环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码&#xff0c;确保每个人使用的环境一致&#xff0c;才能避免 “在我的机器上可以运行”的尴尬问题。…...

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar&#xff1a;《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读&#xff1a;这篇论文提出了一种名为rStar的自我博弈互推理方法&#xff0c;用于增强小型语言模型 (SLMs) 的推理能力&#xff0c;无需微调或依赖更强大的模型。rStar…...

【RK3588 Linux 5.x 内核编程】-内核中断与ThreadedIRQ

内核中断与ThreadedIRQ 文章目录 内核中断与ThreadedIRQ1、Threaded IRQ介绍2、Threaded IRQ相关API3、驱动实现4、驱动验证当 Interrupt 触发时,Interrupt handler 应该执行得非常快,它不应该运行更多的时间(它不应该执行耗时的任务)。 如果我们有执行更多任务的中断处理程…...

Message Processing With Spring Integration高级应用:自定义消息通道与端点

一、Spring Integration 简介 Spring Integration 是 Spring 框架的扩展&#xff0c;支持企业集成模式&#xff08;EIP&#xff09;&#xff0c;提供轻量级的消息处理功能&#xff0c;帮助开发者构建可维护、可测试的企业集成解决方案。 核心目标&#xff1a; 提供简单的模型…...

S32K324 MCAL中的Postbuild和PreCompile使用

文章目录 前言Postbuild和PreCompile的概念MCAL中配置差异总结 前言 之前一直看到MCAL配置中有这个Postbuild和PreCompile的配置&#xff0c;但是不太清楚这两个的区别和使用方法。最近在使用中出现了相关问题&#xff0c;本文介绍一下MCAL中这两种配置的区别和使用。 Postbu…...

kubeadm_k8s_v1.31高可用部署教程

kubeadm_k8s_v1.31高可用部署教程 实验环境部署拓扑图**部署署架构****Load Balance****Control plane node****Worker node****资源分配&#xff08;8台虚拟机&#xff09;**集群列表 前置准备关闭swap开启ipv4转发更多设置 1、Verify the MAC address and product_uuid are u…...

【AI日记】24.12.22 容忍与自由 | 环境因素和个人因素

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容&#xff1a;看 OpenAi 这周的发布会和其他 AI 新闻&#xff0c;大佬视频时间&#xff1a;3 小时 读书 书名&#xff1a;富兰克林自传时间&#xff1a;1 小时评估&#xff1a;读完&#xff0c;总体…...

【Java基础面试题030】Java和Go的区别?

回答重点 可以从语言的设计理念、并发模型、内存管理、生态系统与应用场景来说&#xff1a; 1&#xff09;语言设计理念&#xff1a; Java&#xff1a;Java是一种面向对象编程语言&#xff0c;强调继承、多态和封装等OOP特性。它运行在Java虚拟机&#xff08;JVM&#xff09…...

学习嵩山版《Java 开发手册》:编程规约 - 常量定义(P5)

概述 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结&#xff0c;他旨在提升开发效率和代码质量 《Java 开发手册》是一本极具价值的 Java 开发规范指南&#xff0c;对于提升开发者的综合素质和代码质量具有重要意义 学习《Java 开发手册》是一个提升 Jav…...

洛谷 P1595 信封问题 C语言递归

题目描述 某人写了 n 封信和 n 个信封&#xff0c;如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。 输入格式 一个信封数 n&#xff0c;保证 n≤20。 输出格式 一个整数&#xff0c;代表有多少种情况。 输入输出样例 输入 #1 2 输出 #1 1 输入 #2 …...

QT创建一个模板槽和信号刷新UI

文章目录 信号与槽的声明work.cpp 信号与槽的连接 在Qt中&#xff0c;若您想设计一个仅含一个信号和槽函数框架&#xff0c;用以刷新UI上多个类型相同但可能属性各异的控件&#xff0c;我们可以借助QVariant的灵活性来传递不同种类的数据&#xff0c;同时利用控件的名称或某种标…...

【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图

1.计算机视觉定义 计算机视觉&#xff08;Computer Vision&#xff09;是一个多学科交叉的研究领域&#xff0c;它的核心目标是使计算机能够像人类一样“看”并“理解”视觉信息。换句话说&#xff0c;它希望赋予计算机从图像、视频中自动提取、有意义地分析、理解并解释视觉场…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...