冒泡排序(Java)

ops/2024/11/25 19:34:33/

冒泡排序(Bubble Sort)是一种简单的算法>排序算法,它重复地遍历要排序的列表,比较相邻的元素并交换它们的位置,直到整个列表排序完成。冒泡排序的名称来源于越小的元素会经由交换慢慢“浮”到数列的顶端。

原理

  1. 比较相邻的元素:从数组的第一个元素开始,比较每对相邻的元素。如果第一个元素比第二个元素大,就交换它们的位置。
  2. 一轮遍历:对每一对相邻元素做同样的比较和交换操作。经过一轮遍历后,最大的元素会被“冒泡”到数组的末尾。
  3. 重复遍历:对剩下的元素重复上述过程,直到没有任何一对数字需要比较。

具体步骤

假设有一个数组:[5, 3, 8, 4, 2]

  1. 第一轮遍历

    • 比较 5 和 3,交换位置得到 [3, 5, 8, 4, 2]
    • 比较 5 和 8,不交换
    • 比较 8 和 4,交换位置得到 [3, 5, 4, 8, 2]
    • 比较 8 和 2,交换位置得到 [3, 5, 4, 2, 8]
    • 第一轮结束后,最大的元素 8 已经“冒泡”到数组的末尾。
  2. 第二轮遍历

    • 比较 3 和 5,不交换
    • 比较 5 和 4,交换位置得到 [3, 4, 5, 2, 8]
    • 比较 5 和 2,交换位置得到 [3, 4, 2, 5, 8]
    • 第二轮结束后,第二大的元素 5 已经“冒泡”到倒数第二个位置。
  3. 第三轮遍历

    • 比较 3 和 4,不交换
    • 比较 4 和 2,交换位置得到 [3, 2, 4, 5, 8]
    • 第三轮结束后,第三大的元素 4 已经“冒泡”到倒数第三个位置。
  4. 第四轮遍历

    • 比较 3 和 2,交换位置得到 [2, 3, 4, 5, 8]
    • 第四轮结束后,数组已经完全排序。
  5. 第五轮遍历

    • 比较 2 和 3,不交换
    • 第五轮结束后,数组已经完全排序。

代码如下:

public class BubbleSort {public static void main(String[] args) {// 定义数组int[] arr = {5, 3, 8, 4, 2};// 输出排序前的数组System.out.println("arr的排序前:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}System.out.println(); // 换行// 冒泡排序int temp = 0;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]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}// 输出排序后的数组System.out.println("arr排序后:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}}
}


http://www.ppmy.cn/ops/136650.html

相关文章

GPU服务器厂家:科研服务器领域机遇与博弈,AMD 新UDNA 架构

科研服务器作为推动科学研究进步的核心基础设施&#xff0c;其性能与架构的创新对于整个科研生态有着极为关键的影响。AMD 全新推出的 UDNA 架构&#xff0c;引发了广泛的关注与讨论。 AMD UDNA 架构于科研服务器的产品数据与市场格局 AMD 在计算机硬件领域的影响力持续攀升&a…

使用ENSP实现默认路由

一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为2.2.2.1/24 ip address 2.2.2.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为1.…

从零开始学习数据库 day0(基础)

在当今的信息时代&#xff0c;数据已经成为了企业和组织最重要的资产之一。无论是电子商务平台&#xff0c;社交媒体&#xff0c;还是科研机构&#xff0c;几乎每个地方都离不开数据库。今天&#xff0c;我们将一起走进数据库的世界&#xff0c;学习它的基础知识&#xff0c;帮…

线性代数的发展简史

线性代数的发展简史 线性代数作为数学的一个重要分支&#xff0c;其发展历史悠久而丰富。从古代文明中的基础计算到现代复杂的理论体系&#xff0c;线性代数经历了多个阶段的演变。 古代的起源 线性代数的雏形可以追溯到古埃及、古希腊、古印度和古代中国时期。这些早期文明…

如何在Linux系统中排查GPU上运行的程序

如何在Linux系统中排查GPU上运行的程序 在Linux系统中&#xff0c;随着深度学习和高性能计算的普及&#xff0c;GPU资源的管理和监控变得越来越重要。当您遇到GPU资源不足或性能下降的问题时&#xff0c;需要能够快速定位并解决这些问题。本文将介绍几种常用的方法来帮助您排查…

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意&#xff0c;我们使用的是Mac&#xff0c;所以ios pack并不能使用。 如何嫌官网上下载比较慢的话&#xff0c;可以考虑在csdn网站上下载&#xff0c;应该也是可以找到的。 2、cmake的下载 官网的链接&…

RTVS视频服务应用

在分析一个问题时,可以用一个通用的框架方法论。 WWH法:是什么?为什么?怎么做?这样可以把思路理清晰。 本文的主要内容: RTVS是什么? 为什么要用RTVS做视频服务? RTVS如何实现视频服务? 1.RTVS是什么? 低延迟、跨平台、无插件、高性能的完整商业级1078视频…

第三十九章:Grafana 概述、Docker安装与验证指南

Grafana 概述、Docker安装与验证指南 一、Grafana 概述 Grafana 是一个跨平台的开源可视化分析工具,是目前网络架构和应用分析中最流行的时序数据展示工具。它主要用于大规模指标数据的可视化展示,并支持多种数据源和丰富的可视化插件。Grafana 使用Go语言开发,具备数据监…