【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.mfbz.cn/a/473677.html

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

相关文章

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.ComposeTitleBar(头像和单双行文本标题栏)

一种普通标题栏&#xff0c;支持设置标题、头像&#xff08;可选&#xff09;和副标题&#xff08;可选&#xff09;&#xff0c;可用于一级页面、二级及其以上界面配置返回键。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角…

Linux CentOS 7.6安装mysql5.7.26详细保姆级教程

一、通过wget下载mysql安装包 1、下载 //进入home目录 cd /home //下载mysql压缩包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz //解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz //重命名文件夹 mv mys…

【Springboot3+Mybatis】文件上传阿里云OSS 基础管理系统CRUD

文章目录 一、需求&开发流程二、环境搭建&数据库准备三、部门管理四、员工管理4.1 分页(条件)查询4.2 批量删除员工 五、文件上传5.1 介绍5.2 本地存储5.3 阿里云OSS1. 开通OSS2. 创建存储空间Bucket 5.4 OSS快速入门5.5 OSS上传显示文件 六、配置文件6.1 yml配置6.2 C…

【设计模式】Java 设计模式之模板命令模式(Command)

命令模式&#xff08;Command&#xff09;的深入分析与实战解读 一、概述 命令模式是一种将请求封装为对象从而使你可用不同的请求把客户端与接受请求的对象解耦的模式。在命令模式中&#xff0c;命令对象使得发送者与接收者之间解耦&#xff0c;发送者通过命令对象来执行请求…

【NLP】多头注意力(Multi-Head Attention)的概念解析

一. 多头注意力 多头注意力&#xff08;Multi-Head Attention&#xff09;是一种在Transformer模型中被广泛采用的注意力机制扩展形式&#xff0c;它通过并行地运行多个独立的注意力机制来获取输入序列的不同子空间的注意力分布&#xff0c;从而更全面地捕获序列中潜在的多种语…

Linux快速入门,上手开发 01.学习路线

少时曾许凌云志&#xff0c;当取世间第一流 再见少年拉满弓&#xff0c;不惧岁月不飓风 —— 24.3.20 1.Linux的发展历史 2.VM虚拟机的Linux初体验 3.图形化页面设置系统——快速上手 4.命令行操作——向专业前进 5.核心操作命令——必知必会&#xff08;管理企业级权限/定位b…

【LEMONSQUEEZY: 1【mysql写shell】】

前期环境准备 靶机下载地址 https://vulnhub.com/entry/lemonsqueezy-1%2C473/ 信息收集 ┌──(root㉿kali)-[/home/test/桌面/lemmon] └─# nmap -sP 192.168.47.1/24 --min-rate 3333 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-20 14:02 CST Stats: 0:00:06 e…

目标检测——YOLOR算法解读

论文&#xff1a;YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2105.04206 代码&#xff1a;https://github.com/WongKinYiu/yolo…

使用ansible批量修改操作系统管理员账号密码

一、ansible server端配置 1、对于Linux主机配置免密登录ssh-copy-id -i ~/.ssh/id_rsa.pub rootremote_ip 2、在/etc/ansible/hosts文件中添加相应主机IP 3、对于Windows主机需要在/etc/ansible/hosts文件中进行以下配置 192.168.83.132 ansible_ssh_useradministrator an…

centos重启防火墙导致docker不可用

重启容器报错 错误原因 docker服务启动时定义的自定义链docker&#xff0c;由于centos7 firewall 被清掉 firewall的底层是使用iptables进行数据过滤&#xff0c;建立在iptables之上&#xff0c;这可能会与 Docker 产生冲突。 当 firewalld 启动或者重启的时候&#xff0c;将…

【大数据】Redis介绍和使用

【大数据】Redis介绍和使用 介绍服务器搭建redis支持的五种数据类型数据类型应用场景总结 介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的基于内存的数据结构存储系统&#xff0c;它提供了丰富的数据结构&#xff08;如字符串、哈希表、列表、集合、…

HTML静态网页成品作业(HTML+CSS)——动漫猫和老鼠网页(1个页面)

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

[C语言]——内存函数

目录 一.memcpy使用和模拟实现&#xff08;内存拷贝&#xff09; 二.memmove 使用和模拟实现 三.memset 函数的使用&#xff08;内存设置&#xff09; 四.memcmp 函数的使用 C语言中规定&#xff1a; memcpy拷贝的就是不重叠的内存memmove拷贝的就是重叠的内存但是在VS202…

Vue3组件的注册

组件是Vue.js中的一个重要概念&#xff0c;它是一种抽象&#xff0c;是一个可以复用的Vue.js实例。它拥有独一无二的组件名称&#xff0c;可以扩展HTML元素&#xff0c;以组件名称的方式作为自定义的HTML标签。 在大多数系统网页中&#xff0c;网页都包含header、body、footer…

流畅的 Python 第二版(GPT 重译)(十)

第十八章&#xff1a;with、match 和 else 块 上下文管理器可能几乎与子例程本身一样重要。我们只是初步了解了它们。[…] Basic 有一个 with 语句&#xff0c;在许多语言中都有 with 语句。但它们的功能不同&#xff0c;它们都只是做一些非常浅显的事情&#xff0c;它们可以避…

神经网络(深度学习,计算机视觉,得分函数,损失函数,前向传播,反向传播,激活函数)

目录 一、神经网络简介 二、深度学习要解决的问题 三、深度学习的应用 四、计算机视觉 五、计算机视觉面临的挑战 六、得分函数 七、损失函数 八、前向传播 九、反向传播 十、神经元的个数对结果的影响 十一、正则化与激活函数 一、神经网络简介 神经网络是一种有监督…

排水管网信息化平台:科技赋能,助力城市水环境管理升级

排水管网承担着城市污水、雨水的收集与排出的双重任务&#xff0c;是城市重要的基础设施。城市化率的不断提高&#xff0c;对城市基础设施的性能也提出了考验。 排水管网存在窨井监测设备不足、管段淤积、无序监管、污水超标排放等问题突出&#xff0c;导致部分污水直排受纳水…

数据可视化:守护食品安全的利器

在当今食品安全日益受到关注的背景下&#xff0c;数据可视化技术成为保障食品安全的重要利器。通过数据可视化&#xff0c;我们能够实时监测食品生产、加工、运输和销售等环节&#xff0c;及时发现和解决食品安全问题&#xff0c;保障公众健康。数据可视化如何为食品安全保驾护…

手撕算法-二叉搜索树的最近公共祖先

描述&#xff1a;分析&#xff1a;二叉搜索树没有相同值的节点&#xff0c;因此分别从根节点往下利用二叉搜索树较大的数在右子树&#xff0c;较小的数在左子树&#xff0c;可以轻松找到p、q&#xff1a; //节点值都不同&#xff0c;可以直接用值比较 while(node.val ! target…

Flutter Widget:State 状态管理

响应式的编程框架永恒的主题——“状态(State)管理” 无论是在 React/Vue/Flutter 中讨论的问题和解决的思想都是一致的。 StatefulWidget的状态应该被谁管理&#xff1f;Widget本身&#xff1f;父 Widget &#xff1f;都会&#xff1f;还是另一个对象&#xff1f; 下面是官…