Java——数组排序和查找
一、排序介绍
1、排序的概念
排序是将多个数据按照指定的顺序进行排列的过程。
2、排序的种类
排序可以分为两大类:内部排序和外部排序。
3、内部排序和外部排序
1)内部排序
内部排序是指数据在内存中进行排序,适用于数据量较小的情况。数据可以完全装入内存。常见的内部排序算法包括:
- 交换排序法:如冒泡排序、快速排序等。
- 选择排序法:如选择排序、堆排序等。
- 插入排序法:如直接插入排序、希尔排序等。
2)外部排序
外部排序是指数据量大到无法完全装入内存,需要借助外部存储器(如磁盘)进行排序。常见的外部排序算法包括:
- 合并排序法:如多路归并排序。
- 分配排序法:如基数排序。
二、冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法。它的工作原理是重复地遍历要排序的序列,一次比较两个元素,如果它们的顺序错误则交换它们的位置。这个过程会将每次遍历中最大的元素“冒泡”到序列的末尾,类似于气泡在水中上升。
1、冒泡排序图解
这里使用 5 个元素的数组作为例子:
第一轮:

第二轮:

第三轮:

第四轮:

我们可以发现,对于元素个数为 n 的数组,使用冒泡排序需要 n - 1 轮,第一轮需要 n - 1 步,后面的每一轮的步骤数依次递减一。
2、冒泡排序代码实现
上面我们对冒泡排序的具体原理进行了详细的分析,下面我们将使用代码对数组的冒泡排序进行实现。
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr = {5, 4, 3, 2, 1};for(int i = 0; i < arr.length - 1; i++) {for(int j = 0; j < arr.length - 1 - i; j++) {if(arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println("排序后的数组为 " + Arrays.toString(arr));}
}
运行结果:
![]()
我们也可以详细看看每一轮执行后排序的结果:
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr = {5, 4, 3, 2, 1};for(int i = 0; i < arr.length - 1; i++) {for(int j = 0; j < arr.length - 1 - i; j++) {if(arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}System.out.println("\n第一轮\n" + Arrays.toString(arr));}System.out.println("\n最终排序好的的数组为\n" + Arrays.toString(arr));}
}
运行结果:

可以发现与我们上面分析的一致。
3、冒泡排序优化
可以使用一个状态变量,如果某一轮进行了交换,则代表未排序的部分是无序的;如果某一轮未进行交换,就代表没有排序的部分已经是有序的了,就不用排序了,则可以退出循环。
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr = {1, 2, 4, 3, 5};boolean isSwap = false;for(int i = 0; i < arr.length - 1; i++) {isSwap = false;for(int j = 0; j < arr.length - 1 - i; j++) {if(arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;isSwap = true;}}if(!isSwap) {break;}}System.out.println("最终排序好的的数组为\n" + Arrays.toString(arr));}
}
这里使用一个 boolean 类型变量,开始初始化为 false,如果进行交换了,则将其赋值为 true,再一轮的最后进行判断是否进行过交换,如果没有进行交换,也就是这个状态变量为 false 则退出外层循环,排序完成。
这种冒泡排序再进行一些部分有序的数组的排序任务中,会比为优化的冒泡排序性能更高些。
上面的代码运行结果:

三、数组元素查找
1、顺序查找
顺序查找是一种简单的查找算法,它从数组的第一个元素开始,逐个比较每个元素,直到找到目标元素或遍历完整个数组。顺序查找不需要数组是有序的。
public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int searchNum = 3;for(int i = 0; i < arr.length; i++) {if(arr[i] == searchNum) {System.out.println("arr[" + i + "] = " + searchNum);break;}}}
}
运行结果:
![]()
相关文章:
Java——数组排序和查找
一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类:内部排序和外部排序。 3、内部排序和外部排序 1)内部排序 内部排序是指数据在内存中进行排序,适用于数据量较小的情况…...
Flutter中防抖动和节流策略
什么是防抖和节流? 函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象 是应对频…...
设计模式-中介者(调停者)模式(行为型)
中介者模式 中介者模式是一种行为型模式,又叫调停者模式,它是为了解决多个对象之间,多个类之间通信的复杂性,定义一个中介者对象来封装一些列对象之间的交互,使各个对象之间不同持有对方的引用就可以实现交互…...
HC-05蓝牙模块配置连接和使用
文章目录 1. 前期准备 2. 进入AT模式 3. 电脑串口配置 4. 配置过程 5. 主从机蓝牙连接 6. 蓝牙模块HC-05和电脑连接 1. 前期准备 首先需要准备一个USB转TTL连接器,电脑安装一个串口助手,然后按照下面的连接方式将其相连。 VCCVCCGNDGNDRXDTXDTXD…...
云上小知识:企业选择云服务的小Tips
企业在选择云服务模式时,应综合考虑以下几个关键因素: 1. 业务需求与场景 企业需要根据自身的业务特点和需求来选择合适的云服务模式。例如,如果企业的用户分布广泛,需要跨地域提供服务,那么公有云可能是更好的选择。…...
生成式人工智能 - Stable Diffusion 都使用了哪些技术?
一、Stable Diffusion简述 1、简述 Stable Diffusion在2022年8月开源,是由慕尼黑大学的CompVis研究团队开发的生成式人工神经网络。该项目由初创公司StabilityAI、CompVis和Runway合作开发,并得到了EleutherAI和LAION的支持。截至2022年10月,StabilityAI已筹集了1.01亿美元…...
React的useState的基础使用
import {useState} from react // 1.调用useState添加状态变量 // count 是新增的状态变量 // setCount 修改状态变量的方法 // 2.添加点击事件回调 // userState实现计数实例import {useState} from react// 使用组件 function App() {// 1.调用useState添加状态变量// coun…...
接口自动化Requests+Pytest基础实现
目录 1. 数据库以及数据库操作1.1 概念1.2 分类1.3 作用 2 python操作数据库的相关实现2.1 背景2.2 相关实现 3. pymysql基础3.1 整个流程3.2 案例3.3 Pymysql工具类封装 4 事务4.1 案例4.2 事务概念4.3 事务特征 5. requests库5.1 概念5.2 角色定位5.3 安装5.4 校验5.5 reques…...
深入解析Kafka消息传递的可靠性保证机制
深入解析Kafka消息传递的可靠性保证机制 Kafka在设计上提供了不同层次的消息传递保证,包括at most once(至多一次)、at least once(至少一次)和exactly once(精确一次)。每种保证通过不同的机制…...
jEasyUI 设置排序
jEasyUI 设置排序 jEasyUI 是一个基于 jQuery 的框架,用于轻松构建交互式的 Web 应用程序。它提供了一系列的 UI 组件,如表格(datagrid)、树(tree)、下拉列表(combobox)等,这些组件可以帮助开发者快速实现复杂的界面功能。在本文中,我们将重点讨论如何在 jEasyUI 中…...
MySQL之查询性能优化(十二)
查询性能优化 优化COUNT()查询 4.使用近似值 有时候某些业务场景并不要求完全精确的COUNT值,此时可以用近似值来代替。EXPLAIN出来的优化器估算的行数就是一个不错的近似值,执行EXPLAIN并不需要真正地去执行查询,所以成本很低。很多时候&am…...
7-16 二分查找
7-16 二分查找 分数 25 全屏浏览 切换布局 作者 李廷元 单位 中国民用航空飞行学院 请实现有重复数字的有序数组的二分查找。 输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。 输入格式: 输入第一行有两个…...
对Java中二维数组的深层认识
首先,在JAVA中,二维数组是一种数组的数组。它可以看作是一个矩阵,通常是由于表示二维数据节后,如表格和网格。 1.声明和初始化二维数组 声明 int[][] arr;初始化 int[][] arrnew int[3][4];或者用花括号嵌套 int[][] arr{{1,…...
C++的STL 中 set.map multiset.multimap 学习使用详细讲解(含配套OJ题练习使用详细解答)
目录 一、set 1.set的介绍 2.set的使用 2.1 set的模板参数列表 2.2 set的构造 2.3 set的迭代器 2.4 set的容量 2.5 set的修改操作 2.6 set的使用举例 二、map 1.map的介绍 2.map的使用 2.1 map的模板参数说明 2.2 map的构造 2.3 map的迭代器 2.4 map的容量与元…...
【Java笔记】第10章:接口
前言1. 接口的概念与定义2. 接口的声明与语法3. 接口的实现4. 接口的继承5. 接口的默认方法6. 接口的静态方法7. 接口的私有方法8. 接口的作用9. 接口与抽象类的区别10. 接口在Java集合中的应用结语 上期回顾:【Java笔记】第9章:三个修饰符 个人主页:C_G…...
Angular知识概览
Angular 是一个由 Google 维护的开源前端框架,用于构建动态网页应用。以下是对 Angular 主要概念和特性的概览: 1. Angular 的核心概念 - 组件 (Component):Angular 应用的基本构建块。每个组件包括一个 TypeScript 类,用于处理数…...
经典文献阅读之--Online Monocular Lane Mapping(使用Catmull-Rom样条曲线完成在线单目车道建图)
0. 简介 对于单目摄像头完成SLAM建图这类操作,对于自动驾驶行业非常重要,《Online Monocular Lane Mapping Using Catmull-Rom Spline》介绍了一种仅依靠单个摄像头和里程计生成基于样条的在线单目车道建图方法。我们提出的技术将车道关联过程建模为一个…...
frida timed out
从Android Q(10)开始,Google引入了一种新的机制,加快了app的启动时间 Android USAP 进程启动流程 adb shell su ps -A | grep usaproot 9917 1032 6577052 13676 __skb_wait_for_more_packets 0 S usap64 root 9928 1032 6577052…...
51单片机-独立按键控制灯灯灯
目录 简介: 一. 1个独立按钮控制一个灯例子 二. 在加一个独立按键,控制第二个灯 三. 第一个开关 开灯, 第二个开关关灯 四. 点一下开灯,在点一下关灯 五. 总结 简介: 51 单片机具有强大的控制能力,而独立按键则提供了一种简单的输入方式。 当把独立按键与 …...
【C++】用红黑树封装map、set
用红黑树封装map、set 1. 红黑树1.1 模板参数的控制1.1.1 Value1.1.2 KeyOfValue 1.2 正向迭代器1.2.1 构造函数1.2.2 begin()end()1.2.3 operator()1.2.4 operator--()1.2.5 operator*()1.2.6 operator->()1.2.7 operator()1.2.8 operator!()1.2.9 总代码 1.3 反向迭代器1.…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
