java排序算法之冒泡排序

Java排序算法之冒泡排序是一种简单的排序算法,它通过比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置,重复这个过程直到整个数组排好序。

基本思路

  1. 遍历数组,将相邻两个元素进行比较,若前一个元素比后一个大,则交换它们的位置;
  2. 每遍历一轮,就可以找到当前最大或最小的元素,需要遍历数组长度减去已排序部分的次数。

代码实现

public static void bubbleSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) { // 遍历需要排序的元素
            if (arr[j] > arr[j + 1]) { // 比较相邻两个元素的大小
                int temp = arr[j];
                arr[j] = arr[j + 1]; // 交换元素
                arr[j + 1] = temp;
            }
        }
    }
}

示例说明

假设要对以下数组进行从小到大排序:

int[] arr = { 3, 2, 5, 1, 4 };
  • 第一轮排序

在第一次遍历数组时,比较arr[0]与arr[1],发现arr[0]>arr[1],需要进行交换,可以得到数组:

int[] arr = { 2, 3, 5, 1, 4 };

接下来比较arr[1]与arr[2],因为已经交换了arr[0]和arr[1]的位置,现在的arr[1]为3,arr[2]为5,不需要交换,可以得到数组:

int[] arr = { 2, 3, 5, 1, 4 };

依此类推,可以得到排好序的数组:

int[] arr = { 1, 2, 3, 4, 5 };

  • 第二轮排序

在第二次遍历数组时,需要比较的元素为arr[0]和arr[1],arr[1]和arr[2],arr[2]和arr[3],arr[3]和arr[4],可以得到排好序的数组:

int[] arr = { 1, 2, 3, 4, 5 };

  • 第三轮排序

第三次遍历数组时,只需要比较arr[0]和arr[1],arr[1]和arr[2],arr[2]和arr[3],可以得到排好序的数组:

int[] arr = { 1, 2, 3, 4, 5 };

经过三轮排序后,可以得到从小到大排好序的数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java排序算法之冒泡排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 微信小程序后端Java接口开发的详细步骤

    下面是微信小程序后端Java接口开发的详细步骤: 准备工作 在微信公众平台注册小程序,并获取小程序的 AppID。 在小程序后台设置服务器域名以及接口请求白名单。 在服务器上安装 JDK、Tomcat、Maven,并启动 Tomcat 服务。 选择适合自己的 Spring Boot 或者其他 Java 后端框架。 开发过程 创建项目:使用 Maven 创建项…

    Java 2023年5月23日
    00
  • 浅谈java中String的两种赋值方式的区别

    下面是详细的攻略: 标题 浅谈Java中String的两种赋值方式的区别 简介 在Java编程中,经常要用到字符串类型。字符串在Java中是一个非常重要的数据类型,工作中经常会使用到。对于String类型的赋值方式,有两种方式,分别是直接赋值和通过new关键字创建字符串对象进行赋值。这两种方式在使用时有一些区别,需要我们进行了解和掌握。 直接赋值 直接赋值是…

    Java 2023年5月27日
    00
  • 高价值Java多线程面试题分析

    高价值Java多线程面试题分析攻略 1. 多线程基础知识 在面试过程中,多线程基础知识往往是被考查的重点。这里列举一些常见的面试题: 如何创建线程? 线程的状态有哪些? 线程安全是什么? synchronized和ReentrantLock的区别? wait()和sleep()的区别? volatile关键字的作用? 对于这些问题,我们要明确掌握线程的基本概…

    Java 2023年5月19日
    00
  • Spring Mvc下实现以文件流方式下载文件的方法示例

    下面是针对“Spring MVC下实现以文件流方式下载文件的方法示例”的完整攻略: 1. 需求分析 我们需要实现一个以文件流方式下载文件的功能,具体来说,就是用户在调用该接口时,能够将指定文件以文件流的形式返回浏览器端,让用户下载文件。 2. 实现步骤 2.1 定义接口 我们需要在Controller中定义一个接口来实现文件下载的功能,具体的代码如下: @R…

    Java 2023年6月15日
    00
  • java获取文件大小的几种方法

    当我们需要获取文件的大小时,有多种方法可以实现。下面将介绍java中获取文件大小的几种方法。 使用File类的length方法获取文件大小 File类是Java中常用的文件操作类,它提供了获取文件大小的方法length。该方法返回的是文件的字节数。 import java.io.File; public class FileSizeTest { public…

    Java 2023年5月20日
    00
  • Java spring的三种注入方式详解流程

    Java Spring的三种注入方式详解流程 在Java Spring中,有三种常用的依赖注入方式:构造函数注入、Setter方法注入以及字段注入。下面将分别给出这三种方式的详细讲解流程。 构造函数注入 步骤一:定义一个接口 首先,我们需要定义一个接口。这个接口将会被一个实现类所实现。在这个接口中,我们可以定义一些方法,让实现类去具体实现这些方法。 publ…

    Java 2023年5月19日
    00
  • SpringBoot中异常处理实战记录

    接下来我就详细讲解一下“SpringBoot中异常处理实战记录”的完整攻略。 一、背景介绍 在SpringBoot的开发中,异常处理是必不可少的环节。在程序的运行过程中,可能会遇到各种异常,如数据库连接异常、空指针异常、参数异常等,这些异常如果没有有效的处理,会导致系统运行出错,甚至直接崩溃。因此,合理的异常处理是保证系统稳定性和高效性的重要一环。 二、异常…

    Java 2023年5月27日
    00
  • Servlet中/和/*的区别详解

    当我们在开发Web应用时,Servlet是最核心也是最重要的一个组件。而在Servlet的映射中,常常会用到“/”和“*”两种符号。在本文中,我将详细讲解这两种符号的区别。 1. 映射路径的概念 在开始之前,我们需要了解一下Servlet的映射路径的概念。Servlet的映射路径就是指访问Servlet的URL路径。比如我们定义了一个Servlet,它的映射…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部