【Java】使用 Java 语言实现一个冒泡排序

大家好,我是全栈小5,欢迎阅读小5的系列文章。
这是《Java》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 冒泡排序介绍
  • 通俗理解
  • 代码实现
  • 动图演示
  • 冒泡降序排序
  • 每日小技巧
    • 快速搜索
    • 预览搜索结果
  • 常见排序算法
  • 文章推荐

前言

上一篇文章已经学习了,如何使用IDE集成开发工具编写Java代码,并输出了一段Hello World的代码。
本篇文章将通过IDE使用 Java 语言实现一个冒泡排序。

冒泡排序介绍

冒泡排序也是一种简单直观的排序算法。
冒泡排序的基本思想是多次遍历要排序的数组,每次比较相邻的元素,如果顺序不对就交换它们的位置,一次遍历会将一个最大(或最小)的元素"冒泡"到数组的末尾(或开头)。
通过多次遍历,直到没有任何元素需要交换,整个数组就排序完成了。

通俗理解

当你需要对一组数字进行排序时,冒泡排序就像是在一个装有很多颜色不同的气泡的水槽里,不断地把气泡按照大小顺序排列。
在这个简单的排序算法中,我们会从数组的开头开始,比较相邻的两个数字,如果前一个数字比后一个数字大,就把它们交换位置。
这样,每一轮比较,都会让一个最大的数字“冒泡”到当前尚未排序的部分的末尾。
举个例子,假设我们有一组数字:3, 38, 5, 44, 15, 47, 36, 26, 27, 2, 46, 4, 19, 50, 48。

下面是冒泡排序的执行过程:
1.第一轮比较后,最大的数字 50 被冒泡到了数组末尾,数组变为:3, 5, 38, 15, 44, 36, 26, 27, 2, 46, 4, 19, 47, 48, 50

2.第二轮比较后,第二大的数字 48 被冒泡到了倒数第二的位置,数组变为:3, 5, 15, 38, 36, 26, 27, 2, 44, 4, 19, 46, 47, 48, 50

3.经过多轮比较和交换后,所有数字按照从小到大的顺序排列完成。

代码实现

冒泡排序的 Java 代码

public class BubbleSortExample {public static void main(String[] args) {int[] array = {3, 38, 5, 44, 15, 47, 36, 26, 27, 2, 46, 4, 19, 50, 48};System.out.println("排序前数组:");printArray(array);bubbleSort(array);System.out.println("\n排序后数组:");printArray(array);}public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void printArray(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}

效果
在这里插入图片描述

动图演示

在这里插入图片描述

冒泡降序排序

冒泡排序的默认排序方式是升序排序。
在冒泡排序算法中,数组中相邻的元素会进行比较,如果顺序不对则进行交换,每一轮排序都会将当前最大(或最小)的元素放到正确的位置上,最终实现整个数组的升序排序。
如果要将冒泡排序改为降序排序,只需在比较大小的地方做相应修改即可,如将大于号(>)改为小于号(<)

public class BubbleSortExample {public static void main(String[] args) {int[] array = {3, 38, 5, 44, 15, 47, 36, 26, 27, 2, 46, 4, 19, 50, 48};System.out.println("排序前数组:");printArray(array);bubbleSort(array);System.out.println("\n排序后数组:");printArray(array);}public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] < arr[j + 1]) {  // 修改此处实现降序排序// 交换 arr[j] 和 arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void printArray(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}

在这里插入图片描述

每日小技巧

快速搜索

在树状图中快速搜索
在所有树状图中都可以执行快速搜索,例如,在项目工具窗口中。开始输入,然后很快就能找到所需条目。
在这里插入图片描述

预览搜索结果

您可以使用在文件中查找对话框(Ctrl+Shift+F)得预览区域,不必推出对话框就能执行快速搜索。预览对话框可以显示前100条结果
在这里插入图片描述

常见排序算法

以下是 Java 中常见的几种排序算法及简单描述:
1.冒泡排序(Bubble Sort)

  • 算法思想:通过交换相邻的元素进行比较和排序,每一轮将未排序部分中最大(或最小)的元素沉到底部。
  • 时间复杂度:平均情况和最坏情况下的时间复杂度均为 O(n^2)。
  • 适用场景:适用于数据量较小的情况。

2.选择排序(Selection Sort)

  • 算法思想:每一次遍历找到未排序部分中的最小(或最大)元素,放到已排序部分的末尾。
  • 时间复杂度:平均情况和最坏情况下的时间复杂度均为 O(n^2)。
  • 适用场景:适用于数据量较小的情况。

3.插入排序(Insertion Sort)

  • 算法思想:将数组分为已排序部分和未排序部分,依次将未排序部分的元素插入到已排序部分的合适位置。
  • 时间复杂度:平均情况和最坏情况下的时间复杂度均为 O(n^2)。
  • 适用场景:适用于部分有序的情况,数据量不大的情况。

4.快速排序(Quick Sort)

  • 算法思想:通过选择一个基准元素,将数组分为比基准小和比基准大的两部分,递归地对两部分进行排序。
  • 时间复杂度:平均情况下的时间复杂度为 O(nlogn),最坏情况下为 O(n^2)。
  • 适用场景:适用于大规模数据的排序,性能较好。

5.归并排序(Merge Sort)

  • 算法思想:将数组递归地分成两部分,分别排序后合并,最终得到有序数组。
  • 时间复杂度:最坏情况下的时间复杂度为 O(nlogn)。
  • 适用场景:适用于对链表以及数组等数据结构进行排序。

文章推荐

【Java】使用 Java 语言实现一个冒泡排序

【Java】学习一门开发语言,从TA的Hello World开始

【Java】IDEA集成开发环境工具切换JDK和设置环境变量

【Java】IDE集成开发环境工具IntelliJ安装和使用

【Java】十年老司机转开发语言,新小白从学习路线图开始

【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

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

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

相关文章

【动态三维重建】Deformable 3D Gaussians 可变形3D GS用于单目动态场景重建(CVPR 2024)

主页&#xff1a;https://ingra14m.github.io/Deformable-Gaussians/ 代码&#xff1a;https://github.com/ingra14m/Deformable-3D-Gaussians 论文&#xff1a;https://arxiv.org/abs/2309.13101 文章目录 摘要一、前言二、相关工作2.1 动态场景的神经渲染2.2 神经渲染加速 三…

【Web应用技术基础】HTML(3)——表格

目录 题目1&#xff1a;原始表格 题目2&#xff1a;width、height 题目3&#xff1a; cellpadding 题目4&#xff1a;cellspacing、cellpadding 题目5&#xff1a;caption 题目6&#xff1a;rowspan 题目7&#xff1a;colspan 题目8&#xff1a;汇总题 题目1&#xff1…

从零到一构建短链接系统(八)

1.git上传远程仓库&#xff08;现在才想起来&#xff09; git init git add . git commit -m "first commit" git remote add origin OLiyscxm/shortlink git push -u origin "master" 2.开发全局异常拦截器之后就可以简化UserController 拦截器可以…

彻底讲透:如何写sql能够有效的使用到复合索引?

在MySQL中&#xff0c;有效的使用复合索引需要确保查询条件按照索引定义的列顺序进行。以下是一个具体的例子&#xff1a; 假设我们有一个sales表&#xff0c;它有四个字段&#xff1a;customer_id、product_category、sale_date和amount。为了优化包含这些字段查询的性能&…

Maxwell监听mysql的binlog日志变化写入kafka消费者

一. 环境&#xff1a; maxwell:v1.29.2 (从1.30开始maxwell停止了对java8的使用&#xff0c;改为为11) maxwell1.29.2这个版本对mysql8.0以后的缺少utf8mb3字符的解码问题&#xff0c;需要对原码中加上一个部分内容 &#xff1a;具体也给大家做了总结 &#xff1a; 关于v1.…

【Godot4.2】随机数入门指南

概述 计算机程序是精确的艺术&#xff0c;现实生活却充满了随机性。如果你的游戏缺乏了随机性&#xff0c;也就缺乏了最基础的乐趣。 我们在很多场景下需要使用随机数&#xff0c;来为已经非常刻意和规整的设计带来一些变化和趣味。 比如打怪、打完Boss或开宝箱后随机掉落不…

在MongoDB建模1对N关系的基本方法

“我在 SQL 和规范化数据库方面拥有丰富的经验&#xff0c;但我只是 MongoDB 的初学者。如何建立一对 N 关系模型&#xff1f;” 这是我从参加 MongoDB 分享日活动的用户那里得到的最常见问题之一。 我对这个问题没有简短的答案&#xff0c;因为方法不只有一种&#xff0c;还有…

软件系统开发设计的基本流程

一、前言 经过年的工程实践软件系统开发的流程演变有很多种&#xff0c;但是最基本的还是瀑布模型。但是由于近几年演变了很多种模型&#xff0c;现在很多公司的研发流程并不遵循瀑布模型。主要原因是无法满足市场竞争的需求。比如在哪某个节日需要敏捷上线活动等这样的场景。没…

ASP .Net Core 配置集合 IConfiguration 的使用

&#x1f433;简介 IConfiguration 是 ASP.NET Core 中的一个接口&#xff0c;用于表示配置集合。以下是关于 IConfiguration 的详细介绍&#xff1a; 作用&#xff1a;IConfiguration 允许开发人员从各种来源&#xff08;如文件、环境变量、命令行参数等&#xff09;读取应用…

ASP.NET中的GridView和DataList控件:功能、应用与比较

目录 一、引言 二、GridView控件 三、DataList控件 四、GridView与DataList的比较 五、结论 一、引言 ASP.NET是微软公司开发的一款强大的Web应用程序开发框架&#xff0c;它提供了丰富的控件库&#xff0c;使得开发人员能够更快速、更高效地构建功能强大的Web应用程序。…

【工具类】vscode 常用功能

1. vscode 常用功能 1. vscode 常用功能 1.1. 关闭右侧预览功能1.2. 快捷键(右键或者菜单栏多看看就记住了)1.3. 常用插件 1.1. 关闭右侧预览功能 点击文件-首选项-设置,搜索 “editor.minimap.enabled” ,默认值为打钩,我们只需要把钩去掉即可&#xff1b; 1.2. 快捷键(右…

上传日志到aws日志服务

安装包 <dependency><groupId>software.amazon.awssdk</groupId><artifactId>cloudwatchlogs</artifactId><version>2.16.60</version></dependency>使用 HashMap<String, Object> map new HashMap<>();map.put(…

inner join,left join,right join,outer join的区别

INNER JOIN&#xff1a;内连接是最常见的连接操作&#xff0c;它返回两个表中满足连接条件的交集。即只返回条件匹配的记录。 LEFT JOIN&#xff1a;左连接返回左表记录和右表记录匹配后组成的记录。以及左表中未与右表匹配的记录&#xff0c;右边用null显示。 RIGHT JOIN&…

如何正确关闭MySQL

一、介绍 MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;由于其高性能、稳定性和可靠性&#xff0c;被广泛应用于互联网应用等领域。然而&#xff0c;当我们需要停止或关闭MySQL实例时&#xff0c;很多人并不清楚如何做到正确、安全地关闭MySQL&#xff0c;这将会…

好就业三种专业#信息安全#云计算#网络工程

一、信息安全专业 根据2021年网络安全宣传周白皮书的观察结果&#xff0c;网络安全产业对于人才的需求正以高速增长的趋势呈现&#xff0c;当前网络安全行业存在着巨大的人才缺口&#xff0c;平均供求比例约为1:2。这一现象导致了资深人才的储备不足&#xff0c;并且新人才的培…

AWS Sagemaker详解

Sagemaker各个组件的介绍 Ground Truth Sagemaker Ground Truth Labeling platform。图片语义分析 Amazon SageMaker Ground Truth semantic segmentation labeling taskGround Truth Active Learning will require human labelling only when needed, works well with small…

如何画好架构图

什么是架构图&#xff1f; 架构图 架构的表达 架构在不同抽象角度和不同抽象层次的表达 架构可以从很多个角度去看&#xff0c;比如&#xff1a;业务架构、应用架构、技术架构、代码架构、数据架构等。 从架构级别来分类&#xff0c;使用金字塔的说明&#xff0c;上层级别…

图像分割论文阅读:Adaptive Context Selection for Polyp Segmentation

这篇论文的主要内容是关于一种用于息肉分割的自适应上下文选择网络&#xff08;Adaptive Context Selection Network&#xff0c;简称ACSNet&#xff09; 1&#xff0c;模型的整体结构 模型的整体结构基于编码器-解码器框架&#xff0c;并且包含了三个关键模块&#xff1a;局部…

贵州省二级分类土地利用数据(矢量)

贵州省&#xff0c;地处中国西南腹地&#xff0c;地貌属于中国西南部高原山地&#xff0c;境内地势西高东低&#xff0c;自中部向北、东、南三面倾斜&#xff0c;平均海拔在1100米左右。贵州高原山地居多&#xff0c;素有“八山一水一分田”之说。全省地貌可概括分为&#xff1…

列表(list)篇(二)

文章目录 2.10 insert()函数2.11 list()函数2.12 pop() 函数2.13 remove()函数2.14 reverse()函数2.15 sort()函数2.16 sorted()函数2.17 sum()函数 2.10 insert()函数 在Python中&#xff0c;list.insert()是一个列表方法&#xff0c;用于在指定索引位置插入一个元素。这个方…