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

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…

【启明智显彩屏应用】Model3A 7寸触摸彩屏AGV小车应用方案

一、AGV小车概述 &#xff08;一&#xff09;介绍 自动导向车(Automated Guided Vehicle&#xff0c;简称AGV)&#xff0c;也称为自动导向搬运车、自动引导搬运车。AGV广泛应用在自动化的生产当中&#xff0c;大大节约劳动力和提高生产效率。 &#xff08;二&#xff09;现状…

调试环境搭建(Redis 6.X 版本)

今儿&#xff0c;我们来搭建一个 Redis 调试环境&#xff0c;目标是&#xff1a; 启动 Redis Server &#xff0c;成功断点调试 Server 的启动过程。使用 redis-cli 启动一个 Client 连接上 Server&#xff0c;并使用 get key 指令&#xff0c;发起一次 key 的读取。 视频可见…

170.二叉树:平衡二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

pytorch之猫狗识别项目

1. 导入资源包 资源包&#xff1a; import torchvision&#xff1a;PyTorch 提供的视觉库&#xff0c;包含了常用的计算机视觉模型架构、数据集以及图像转换工具。 from torchvision import datasets, models&#xff1a;导入 torchvision 中的 datasets 和 models 模块&#…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(有线网络续篇)

继上一篇文章中成功实施了有线802.1x验证域账号并动态分配VLAN的策略之后&#xff0c;我们迎来了一个新的目标&#xff1a;在用户验证失败时&#xff0c;自动分配一个Guest VLAN&#xff0c;以确保用户至少能够访问基本的网络服务。这一改进将显著提升网络的灵活性和用户的上网…

东航携手抖音生活服务开启机票首播,推出国内、国际超值机票次卡

在民航暑运旺季到来之际&#xff0c;越来越多的用户选择提前做好旅行规划&#xff0c;囤下高性价比的出游商品。6月6日18点&#xff0c;中国东方航空&#xff08;以下简称“东航”&#xff09;将在抖音开启首次机票直播&#xff0c;推荐多款超值机票次卡及空中Wi-Fi等特色产品&…

【Python机器学习】PCA——特征提取(1)

PCA的一个重要应用是特征提取。特征提取背后的思想是&#xff0c;可以找到一种数据表示&#xff0c;比给定的原始表示更适合于分析。特征提取很有用&#xff0c;它的一个很好的应用实例就是图像。图像由像素组成&#xff0c;通常存储于红绿蓝强度。图像中的对象通常由上千个像素…

Postman 连接数据库 利用node+xmysql

1、准备nodejs环境 如果没有安装&#xff0c;在网上找教程&#xff0c;安装好后&#xff0c;在控制台输入命令查看版本&#xff0c;如下就成功了 2、安装xmysql 在控制台输入 npm install -g xmysql 3、连接目标数据库 帮助如下&#xff1a; 示例&#xff1a; 目标数据库…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称&#xff1a;SFFM 2024 截稿时间&#xff1a;以官网为准 大会地点&#xff1a;中国广州 会议官网&#xff1a;www.iacsffm.com 会议邮箱&am…

Linux 35.5 + JetPack v5.1.3@FUEL编译安装

Linux 35.5 JetPack v5.1.3FUEL编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;建立工程Step 3&#xff1a;编译工程Step 4&#xff1a;安装工程 3. 问题汇总3.1 fuel_planner/exploration_manager - dw3.2 fuel_planner/plan_env - OpenCV库…

Anaconda软件:安装、管理python相关包

Anaconda的作用 一个python环境中需要有一个解释器, 和一个包集合. 解释器&#xff1a; 根据python的版本大概分为2和3. python2和3之间无法互相兼容, 也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行. 包集合&#xff1a;包含了自带的包和第三方包, 第三…

RPA影刀 | 变量的使用

1.什么是变量 2.变量的作用 作用1&#xff1a;方便后续流程调用 这里在后续流程“点击元素”中&#xff0c;就可以选中这个变量 作用2&#xff1a;区分相同属性的变量 如果要打开两个网页&#xff0c;总不能都叫web_page吧。 所以这里一个叫百度web_page&#xff0c;一个叫…

Docker:认识镜像仓库及其命令

文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…

Java Web学习笔记25——Vue组件库Element

什么是Element&#xff1f; Element: 是饿了么团队研发的&#xff0c;一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库。 组件&#xff1a;组成网页的部件&#xff0c;例如&#xff1a;超链接、按钮、图片、表格、表单、分页条等等。 官网&#xff1a;https:…

C++基础编程100题-007 OpenJudge-1.3-05 计算分数的浮点数值

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/05/ 描述 两个整数a和b分别作为分子和分母&#xff0c;既分数 a/b &#xff0c;求它的浮点数值&#xff08;双精度浮点数&#xff0c;保留小数点后9位&#xff09; 输入 输入仅一行&#xff0c;包括两个…

PVE安装CENTOS9提示“Fatal glibc error: CPU does not support x86-64-v2”

问题描述&#xff1a;PVE安装CENTOS9提示“Fatal glibc error: CPU does not support x86-64-v2” RHEL 9要求x86_64的CPU支持x86-64-v2&#xff0c;x86-64-v2需要处理器支持 CMPXCHG16B、LAHF-SAHF、POPCNT、SSE3、SSE4.1、SSE4.2、SSSE3 等现代指令集 解决方法&#xff1a;…

最近一直没动静的Pika Labs原来在筹集融资,加快构建视频基础模型

Pika 筹集了 8000 万美元&#xff0c;因此任何人都可以根据命令制作视频。 今天对我们来说是一个重要的日子。自从我们从斯坦福大学退学去构建 Pika 以来已经一年了&#xff0c;在这段时间里&#xff0c;我们在 Discord 上进行了秘密发布&#xff0c;发布了我们的 1.0 模型和 …

驱动开发之设备树语法

目录 0.设备树由来 1.设备树概念 1.1.DTS、DTB 和 DTC 和 dtsi 概念 2.设备树语法 2.1.例子 2.2.设备节点 2.2.1.节点命名 2.2.2节点数据类型 2.2.3.根节点 2.2.4.属性介绍 2.2.4.1.compatible属性 2.2.4.2.name属性 2.2.4.3.status 属性 2.2.4.5.unit-address属性…

DBeaver无法连接Clickhouse,连接失败

DBeaver默认下载的是0.2.6版本的驱动&#xff0c;但是一直连接失败&#xff1a; 报错提示 解决办法 点击上图中的Open Driver Configuration点击库 - 重置为默认状态在弹出的窗口中修改驱动版本号为0.2.4或者其他版本&#xff08;我没有试用过其他版本&#xff09;&#xff0…