首页 > 编程语言 >【Java】使用 Java 语言实现一个冒泡排序

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

时间:2024-04-01 17:26:32浏览次数:29  
标签:arr Java 语言 int 冒泡排序 数组 排序

【Java】使用 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)。
  • 适用场景:适用于对链表以及数组等数据结构进行排序。

 

标签:arr,Java,语言,int,冒泡排序,数组,排序
From: https://www.cnblogs.com/vue1168/p/18108946

相关文章

  • 冒泡排序
    1、基本概念这里使用C++来实现冒泡排序法冒泡排序法采用不停地交换彼此位置来实现,故而形象地称之为冒泡冒泡排序主要是由两层循环组成(这里记下来的原因就是两层循环的停止条件,自己编写出了错误)。1、外层循环:主要是用来轮询;2、内层循环:主要用来交换位置(前提是满足if条件)3、外......
  • 【网络原理】使用Java基于TCP搭建简单客户端与服务器通信
    【网络原理】使用Java基于TCP搭建简单客户端与服务器通信  ......
  • C语言中常用的文件操作
    本文将介绍常用的关于文件操作函数,如fopen,fclose,fread,fwrite,feek,ftell,rewind以及feof和ferror等文件操作操作函数,还介绍一些用于所有输入输出流的函数如fgetc,fputc,fgets,fputs,fprintf,fscanf等函数,还介绍了sscanf,sprintf函数,feof和ferror函数。最后介绍了文件文件缓......
  • [附源码]JAVA计算机毕业设计电脑小白网站(源码+开题)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容JAVA计算机毕业设计电脑小白网站的研究背景、意义、目的、研究内容、拟解决的主要问题、研究方案和预期成果一、研究背景随着信息技术的迅猛发展,计算机已成......
  • 【JAVA】抽象类是什么?为什么要用抽象类?
    抽象类是什么?在面向对象编程(OOP)中,抽象类(AbstractClass)是一种特殊的类,它主要用于表示一组相关类的共同特征,但不能直接创建实例对象。抽象类通常包含抽象方法(AbstractMethod),抽象方法没有具体实现,只有方法签名,即方法名、参数列表和返回类型,但没有方法体。抽象方法在抽象类中用......
  • 【JAVA】try-catch结构:异常处理的使用
    try-catch 是Java和许多其他编程语言中用于异常处理的关键字组合,它允许程序员优雅地捕获和处理运行时可能出现的错误。以下是 try-catch 结构的详细说明:结构:try{//有可能抛出异常的代码块//这里可以调用方法、执行操作等riskyOperation();}catch(S......
  • 地方废物回收机构管理的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)目录1.管理员功能效果图2.员工功能3.系统功能设计4.数据库E-R图设......
  • 基于vue的MOBA类游戏攻略分享平台的设计与实现|Springboot+Vue+ Mysql+Java+ B/S结构(
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。现今,越来越多的人乐于选择一项合适的管理方案,但是普通用户往往受到管理经验地限制,这时MOBA类游戏攻略分享平台的崛起,大量游戏攻略进入人们生活,而MOBA类游戏攻略制无疑是游戏攻略管理的最好制度,在这样成功的管理模......
  • CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。在世界范围内,CSGO赛事管理系统已经得到了非常广泛的应用,范围变的越来越广,功能也在不断的完善,操作简便、节省人力、成本低廉,但工作的效率确一直不断的提高。为CSGO赛事行业管理全程提供自动化和全面的纪录,避免出错......
  • java几种代理模式的实现方式
    1.代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实......