首页 > 编程语言 >简单而经典:Java中的冒泡排序算法详解

简单而经典:Java中的冒泡排序算法详解

时间:2023-09-24 22:32:17浏览次数:40  
标签:arr Java 元素 冒泡排序 算法 详解 数组 排序

当谈到简单的排序算法时,冒泡排序(Bubble Sort)通常是其中之一。虽然它不是最高效的排序算法之一,但它的简单性和易于理解使它成为学习排序算法的良好起点。在本文中,我们将详细介绍Java中的冒泡排序。

冒泡排序的基本原理

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次遍历待排序的元素,比较相邻元素的大小,并交换它们直到整个序列有序。冒泡排序的基本思想是将较大的元素逐渐“浮”到数组的右端,而较小的元素逐渐“沉”到数组的左端。其基本原理如下:

  1. 从数组的第一个元素开始,比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素(升序排序),则交换它们的位置。
  3. 步骤1和步骤2,直到遍历整个数组。
  4. 上步骤,每次遍历都将最大的元素“冒泡”到数组的末尾。
  5. 复以上步骤,但不包括已排序的最大元素,直到整个数组排序完成。

简单而经典:Java中的冒泡排序算法详解_排序算法

Java实现冒泡排序

下面是一个简单的Java代码示例,演示了如何使用冒泡排序对一个整数数组进行排序:

public static void main(String[] args) {
    int[] arr = new int[]{5,7,4,3,6,2};
    bubbleSort(arr);
    System.out.println("冒泡排序完的数组:"+Arrays.toString(arr));

}

public static void bubbleSort(int[] arr) {
    int n = arr.length;
    //外部循环控制排序的趟数。冒泡排序的每一趟会将最大的元素"冒泡"到数组的末尾,因此需要执行 n-1 趟,其中 n 是元素的总数
    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;
            }
        }
        System.out.println("第"+(i+1)+"趟:"+Arrays.toString(arr));
    }
}

输出的结果:

第1趟:[5, 4, 3, 6, 2, 7]
第2趟:[4, 3, 5, 2, 6, 7]
第3趟:[3, 4, 2, 5, 6, 7]
第4趟:[3, 2, 4, 5, 6, 7]
第5趟:[2, 3, 4, 5, 6, 7]
冒泡排序完的数组:[2, 3, 4, 5, 6, 7]

冒泡排序的性能

冒泡排序的时间复杂度是简单而经典:Java中的冒泡排序算法详解_冒泡排序_02,其中n是要排序的元素个数。由于其性能较差,通常不建议在大型数据集上使用冒泡排序。然而,冒泡排序仍然有其价值:

  • 学习排序算法:冒泡排序是理解排序算法的良好起点,它的实现非常简单,有助于初学者理解排序的基本概念。
  • 小型数据集:对于小型数据集,冒泡排序可能是一个合理的选择,因为其实现简单且易于编写。

在Java JDK中,冒泡排序通常不会直接用于实际的生产代码中。Java提供了更高效的排序方法,例如Arrays.sort()用于对数组进行排序,以及Collections.sort()用于对集合进行排序,这些方法使用了更高效的排序算法,如快速排序和归并排序。

总结

总之,冒泡排序是一个简单而易于理解的排序算法,它在学习排序算法的过程中具有重要作用。然而,在实际应用中,Java JDK提供了更高效的排序方法,推荐使用这些方法来提高性能。冒泡排序的价值在于它对排序算法的基本理解,而在实际项目中,通常需要更高效的排序算法来应对大规模数据的排序需求。

标签:arr,Java,元素,冒泡排序,算法,详解,数组,排序
From: https://blog.51cto.com/xiuji/7589263

相关文章

  • Java连接MSSQL2012数据报TLS10 is not accepted by client preferences [TLS13, TLS12
    这一问题好像是因为Java新版本禁用了些老的加密算法引起的,解决方法为修改java.security文件里的配置信息即可。我用的是Java21,在安装目录 Java\jdk-21\conf\security下找到java.security文件,用记事本打开,搜索TLSv1,大概在752行的位置有如下配置信息:jdk.tls.disabledAlgorithm......
  • Java 21 正式发布!新特性专栏继续更起来了~
    就在昨天晚间,Oracle公司宣布Java21正式发布。该版本是继JDK17之后最新的长期支持版本(LTS),将获得至少8年的支持!Java21号称具有数千项性能、稳定性和安全性改进。新的JDK21包括对15项改进的抢先体验,这些增强功能是在OracleCloudWorld2023会议上宣布的,包括支持虚拟线程以......
  • Java语法学习——运算符
    一、基本的算术运算符、+符号做连接符1.基本的算术运算符   为了掌握基本的算术运算符的使用,我们在IDEA里新建一个package(it.com.operator),然后在这下面新建一个Javaclass(OperatorDemo1):packageit.com.operator;publicclassOperatorDemo1{publicstaticvoid......
  • Java课堂
    importjava.awt.*;importjava.awt.event.*;importjava.util.*;publicclassMain{publicstaticdoublemax(double...values){doublelargest=Double.MIN_VALUE;for(doublev:values)if(v>largest)largest=v;......
  • 无涯教程-JavaScript - RANK.AVG函数
    描述RANK.AVG函数在提供的值数组中返回给定值的统计等级。如果列表中有重复值,则返回平均排名。语法RANK.AVG(number,ref,[order])争论Argument描述Required/OptionalNumberThenumberwhoserankyouwanttofind.RequiredRefAnarrayof,orareferenceto,a......
  • Angular 应用程序的 Hydration 概念详解
    Angular应用程序的Hydration概念Hydration概念是Angular应用程序中的一个关键概念,它涉及到Angular框架在客户端渲染(Client-siderendering,CSR)中的运作方式。要深入理解Hydration,首先需要了解CSR和SSR(Server-siderendering,服务器端渲染)之间的基本区别,以及Angular是如何利用Hydra......
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/
    今天解决了一个很早之前的问题!!!无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]之前一直以为是jar包不匹配,但是改了jar包之后连uri都分辨不出来了后来在网上查到是tomcat的问题,将tomcat的conf目录下的catalina.properties的tomc......
  • JavaScript函数的使用
    有关函数概念:匿名函数指的是没有函数名称的函数。作用:可以有效的避免全局变量的污染以及函数名的冲突问题。说明:既是函数表达式的另一种表示形式,又可通过函数声明的方式实现调用。函数语法varfun4=function(){console.log("我是匿名函数中封装的一段代码");......
  • 一致性哈希算法实现(java)
    代码基本实现未完待续........... publicstaticvoidmain(String[]args){​TreeMap<Integer,String>hashNodes=newTreeMap<>();hashNodes.put(1,"1.1.1.1");hashNodes.put(4,"1.1.1.2");hashNodes.put......
  • 无涯教程-JavaScript - POISSON.DIST函数
    描述POISSON.DIST函数返回泊松分布。泊松分布的常见应用是预测特定时间的事件数。语法POISSON.DIST(x,mean,cumulative)争论Argument描述Required/OptionalXThenumberofevents.RequiredMeanTheexpectednumericvalue.RequiredCumulative确定返回的概率分......