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;}}}	
}

运行结果:

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

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

相关文章

【SQLAlChemy】如何连接数据库?

使用SQLAlChemy连接数据库 导入包 首先&#xff0c;导入创建数据库引擎的包。 from sqlalchemy import create_engine编写数据库配置 SQLALCHEMY_DATABASE_URL "mysql://root:123456789127.0.0.1:3306/tortoise"字段解释&#xff1a; mysql:&#xff1a;这是数…

持续警惕火灾风险:学校可燃气体报警器的定期校准检验

可燃气体报警器在学校中的安装、检验和校准对于保护师生生命安全至关重要。 接下来&#xff0c;佰德将探讨可燃气体报警器在学校中的必要性&#xff0c;以及相关实际案例和数据&#xff0c;为您呈现一个安全的学习环境。 一、学校安全不能掉以轻心 学校是培养未来的摇篮&…

【CS.SE】端午节特辑:Docker容器化技术详解与实战

端午节, 先祝愿大家端午安康&#xff0c;阖家幸福, 哈哈&#xff01;这篇讲下Docker这一现代软件开发中不可或缺的技术。软件工程涉及软件开发的整个生命周期&#xff0c;包括需求分析、设计、构建、测试、部署和维护。Docker作为一种容器化技术&#xff0c;直接关联到软件部署…

云服务器CPU和内存直接被zzh恶意挖矿程序打满,如何解决?

回顾 最近在服务器上面部署网站&#xff0c;刚开始使用还是没问题的&#xff0c;当时一段时间之后发现CPU和内存总是被打满&#xff0c;本地没有跑大的应用&#xff0c;主要有mysql、nginx、redis&#xff0c;一度还以为是nginx 的问题&#xff0c;但是后来排除了。之后使用ht…

Android 11 低电量自动关机失效

Android 11 低电量自动关机 概述 安卓系统设计了低电关机功能&#xff0c;旨在当手机电池电量过低时自动关机&#xff0c;以保护手机硬件和数据安全。该功能由以下几个部分组成&#xff1a; 电池电量监测: 安卓系统通过 BatteryService 组件持续监测电池电量。BatteryService…

小主机折腾记24

好久不更新&#xff0c;最近折腾的事如下 1.10块钱自提买了个半高机箱&#xff0c;15086140&#xff0c;把之前拆机的H61m-A/M32AA/DP_MB与200w航嘉电源装了进去&#xff0c;额外买了半高pcie转接了个m2位&#xff0c;江波龙64g安装了win10专业版&#xff0c;最后卖了176块钱&a…

实战分析:记录一下线上OOM排查(原创)

记录背景 公司仓库系统经常反馈出现系统使用不了503的情况&#xff0c;自动挂掉。 启动脚本添加命令 以为是程序发生OOM导致内存溢出&#xff0c;添加命令&#xff0c;发生内存溢出输出文件 -XX:HeapDumpOnOutOfMemoryError -XX:ErrorFile./errorfile.log -XX:HeapDumpPath.…

Windows无法安装到这个硬盘空间。选定的分区上启用了BitLocker驱动器加密。请在控制面板中暂停(也称为禁用)BitLocker,然后重新开始安装。

我们安装操作系统的时候&#xff0c;到了选择安装分区的地方&#xff0c;我们选中的分区提示“无法在驱动器的分区上安装Windows”&#xff0c;然后我们点击显示详细信息&#xff0c;提示如图下所示 分析原因&#xff0c;可能是之前的分区未进行格式化。但是这个时候我们无法格…

【Python预处理系列】深入理解过采样技术及其Python实现

目录 一、过采样简介 二、过采样的实现方法 三、过采样和欠采样是数据增强吗 四、Python实现SMOTE过采样 &#xff08;一) 生成不平衡数据集 &#xff08;二&#xff09; 将数据集转换为DataFrame&#xff0c;便于展示 &#xff08;三) 应用SMOTE算法进行过采样 &…

【Centos7】CentOS 7下的PyTorch安装策略:高效实践指南

【Centos7】CentOS 7下的PyTorch安装策略&#xff1a;高效实践指南 大家好 我是寸铁&#x1f44a; 总结了一篇【Centos7】CentOS 7下的PyTorch安装策略&#xff1a;高效实践指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 由于需要跑深度学习&#xff0c;要用到pytorch&a…

重塑楼宇管理:智慧管控可视化开启高效新篇章

借助图扑智慧楼宇管控可视化技术&#xff0c;实现实时监控与智能化管理&#xff0c;快速响应潜在问题&#xff0c;确保楼宇安全、节能和高效运行。

Git之解决重复输入用户名和密码(三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

快速入门Linux及使用VSCode远程连接Linux服务器

在当前的技术环境中&#xff0c;Linux操作系统因其强大的功能和灵活性而广受欢迎。无论你是开发人员、系统管理员还是技术爱好者&#xff0c;学习Linux都是提升技术技能的重要一步。本文将介绍如何快速入门Linux&#xff0c;并使用Visual Studio Code&#xff08;VSCode&#x…

时光正好保剑锋的抱治百病与成年人的世界

《时光正好》&#xff1a;保剑锋的“抱治百病”与成年人的世界在繁忙的都市里&#xff0c;每个角落上演着各自的人生戏码。而在这些戏码中&#xff0c;由保剑锋主演的《时光正好》无疑成为了近期引人注目的焦点。这部电视剧以其真实而深刻的剧情&#xff0c;让我们看到了成年人…

SpringBoot+Vue实现前后端分离基本的环境搭建

目录 一、Vue项目的搭建 &#xff08;1&#xff09;基于vite创建vue项目 &#xff08;2&#xff09;引入elementplus &#xff08;3&#xff09;启动后端服务&#xff0c;并测试 二、SpringBoot项目的搭建 &#xff08;1&#xff09;通过idea创建SpringBoot项目 &#x…

有效的括号(oj题)

一、题目链接 https://leetcode.cn/problems/valid-parentheses/submissions/538110206 二、题目思路 利用栈的性质&#xff0c;后进先出 1.依次读取字符串&#xff0c;判断是否为左括号&#xff0c;如果是&#xff0c;就将其入栈。 2.如果读取的不是左括号&#xff0c;就说…

【网络教程】Iptables官方教程-学习笔记7-简单理解IPTABLES规则的作用流程

前面学习了IPTABLES的所有功能介绍后&#xff0c;一个Linux设备里的IPTABLES规则集是如何运行的&#xff0c;这里简单做个介绍。 在Linux设备里输入"iptables -nvl",得到该设备的所有防火墙规则&#xff0c;得到的结果中可以看到这个设备防火墙里所有的链以及链里的…

Git从入门到放弃

由于我的Git学的不太好&#xff0c;所以为了能够将以后我的学习笔记能够整理的更好&#xff0c;我先要系统的学习一下git&#xff0c;文章由此产生。 文章笔记源自尚硅谷Git入门到精通全套教程视频内容 1 进入官网 学习新技术的第一步需要熟悉官网&#xff0c;Git也不例外。ht…

【Python报错】已解决AttributeError: ‘Series’ object has no attribute ‘columns’

成功解决“AttributeError: ‘Series’ object has no attribute ‘columns’”错误的全面指南 一、引言 在Python的数据处理和分析中&#xff0c;Pandas库是一个不可或缺的工具。然而&#xff0c;在使用Pandas时&#xff0c;可能会遇到各种错误&#xff0c;其中之一就是“Att…

HTML静态网页成品作业(HTML+CSS)—— 24节气立夏介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…