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

 更新时间:2024年03月24日 14:09:51   作者:全栈小5  
冒泡排序也是一种简单直观的排序算法,基本思想是多次遍历要排序的数组,每次比较相邻的元素,如果顺序不对就交换它们的位置,本篇文章将通过IDE使用 Java 语言实现一个冒泡排序,需要的朋友可以参考下

前言

本篇文章将通过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实现冒泡排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringSecurity详解整合JWT实现全过程

    SpringSecurity详解整合JWT实现全过程

    JWT作为一个开放的标准( RFC 7519 ),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。接下来通过本文给大家介绍springSecurity+jwt实现互踢功能,需要的朋友可以参考下
    2022-07-07
  • CompletableFuture创建及功能使用全面详解

    CompletableFuture创建及功能使用全面详解

    这篇文章主要为大家介绍了CompletableFuture创建及功能使用全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringCloud解决feign调用token丢失问题解决办法

    SpringCloud解决feign调用token丢失问题解决办法

    在feign调用中可能会遇到如下问题:同步调用中,token丢失,这种可以通过创建一个拦截器,将token做透传来解决,异步调用中,token丢失,这种就无法直接透传了,因为子线程并没有token,这种需要先将token从父线程传递到子线程,再进行透传
    2024-05-05
  • 解决IDEA占用C盘空间过大的问题

    解决IDEA占用C盘空间过大的问题

    这篇文章主要介绍了解决IDEA占用C盘空间过大的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot+Thymeleaf+ECharts实现大数据可视化(基础篇)

    SpringBoot+Thymeleaf+ECharts实现大数据可视化(基础篇)

    本文主要介绍了SpringBoot+Thymeleaf+ECharts实现大数据可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06
  • Java7之forkjoin简介_动力节点Java学院整理

    Java7之forkjoin简介_动力节点Java学院整理

    Java7引入了Fork Join的概念,来更好的支持并行运算。接下来通过本文给大家分享Java7之forkjoin简介,感兴趣的朋友一起看看吧
    2017-06-06
  • java根据网络地址保存图片的方法

    java根据网络地址保存图片的方法

    这篇文章主要为大家详细介绍了java根据网络地址保存图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • springboot各种下载文件的方式汇总

    springboot各种下载文件的方式汇总

    下载功能其实就是用户输入指定文件路径信息,然后把文件返回给用户,下面这篇文章主要给大家介绍了关于springboot各种下载文件的方式,需要的朋友可以参考下
    2022-10-10
  • java线程中synchronized和Lock区别及介绍

    java线程中synchronized和Lock区别及介绍

    这篇文章主要为大家介绍了java线程中synchronized和Lock区别及介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Netty学习教程之基础使用篇

    Netty学习教程之基础使用篇

    Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。下面这篇文章主要给大家介绍了关于Netty基础使用的相关资料,需要的朋友可以参考下。
    2017-05-05

最新评论