JAVA讲解算法-排序算法-冒泡排序算法-01

一、定义

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列, 一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

二、算法示例讲解(Java)

以数组10, 9, 8, 7, 6, 5, 4, 3, 2, 1为样例进行排序,数组长度为10,以外层for循环分组,会进行9组比较,每组比较最后结果就是把最大值找到放到最后面。

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;}}}
}
  • 第1组比较:

循环条件数据为:[10, 9, 8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=10和arr[j + 1]=9进行比较
第1组第1次处理结果:[9, 10, 8, 7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=8进行比较
第1组第2次处理结果:[9, 8, 10, 7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=7进行比较
第1组第3次处理结果:[9, 8, 7, 10, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=6进行比较
第1组第4次处理结果:[9, 8, 7, 6, 10, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=5进行比较
第1组第5次处理结果:[9, 8, 7, 6, 5, 10, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=4进行比较
第1组第6次处理结果:[9, 8, 7, 6, 5, 4, 10, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=3进行比较
第1组第7次处理结果:[9, 8, 7, 6, 5, 4, 3, 10, 2, 1]
比较对象arr[j]=10和arr[j + 1]=2进行比较
第1组第8次处理结果:[9, 8, 7, 6, 5, 4, 3, 2, 10, 1]
比较对象arr[j]=10和arr[j + 1]=1进行比较
第1组第9次处理结果:[9, 8, 7, 6, 5, 4, 3, 2, 1, 10]
  • 第2组比较:

循环条件数据为:[9, 8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[9, 8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=9和arr[j + 1]=8进行比较
第2组第1次处理结果:[8, 9, 7, 6, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=7进行比较
第2组第2次处理结果:[8, 7, 9, 6, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=6进行比较
第2组第3次处理结果:[8, 7, 6, 9, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=5进行比较
第2组第4次处理结果:[8, 7, 6, 5, 9, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=4进行比较
第2组第5次处理结果:[8, 7, 6, 5, 4, 9, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=3进行比较
第2组第6次处理结果:[8, 7, 6, 5, 4, 3, 9, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=2进行比较
第2组第7次处理结果:[8, 7, 6, 5, 4, 3, 2, 9, 1, 10]
比较对象arr[j]=9和arr[j + 1]=1进行比较
第2组第8次处理结果:[8, 7, 6, 5, 4, 3, 2, 1, 9, 10]
  • 第3组比较:

循环条件数据为:[8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=8和arr[j + 1]=7进行比较
第3组第1次处理结果:[7, 8, 6, 5, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=6进行比较
第3组第2次处理结果:[7, 6, 8, 5, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=5进行比较
第3组第3次处理结果:[7, 6, 5, 8, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=4进行比较
第3组第4次处理结果:[7, 6, 5, 4, 8, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=3进行比较
第3组第5次处理结果:[7, 6, 5, 4, 3, 8, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=2进行比较
第3组第6次处理结果:[7, 6, 5, 4, 3, 2, 8, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=1进行比较
第3组第7次处理结果:[7, 6, 5, 4, 3, 2, 1, 8, 9, 10]
  • 第4组比较:

循环条件数据为:[7, 6, 5, 4, 3, 2]
实际比较范围数据:[7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=7和arr[j + 1]=6进行比较

第4组第1次处理结果:[6, 7, 5, 4, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=5进行比较
第4组第2次处理结果:[6, 5, 7, 4, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=4进行比较
第4组第3次处理结果:[6, 5, 4, 7, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=3进行比较
第4组第4次处理结果:[6, 5, 4, 3, 7, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=2进行比较
第4组第5次处理结果:[6, 5, 4, 3, 2, 7, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=1进行比较
第4组第6次处理结果:[6, 5, 4, 3, 2, 1, 7, 8, 9, 10]
  • 第5组比较:

循环条件数据为:[6, 5, 4, 3, 2]
实际比较范围数据:[6, 5, 4, 3, 2, 1]

比较对象arr[j]=6和arr[j + 1]=5进行比较
第5组第1次处理结果:[5, 6, 4, 3, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=4进行比较
第5组第2次处理结果:[5, 4, 6, 3, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=3进行比较
第5组第3次处理结果:[5, 4, 3, 6, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=2进行比较
第5组第4次处理结果:[5, 4, 3, 2, 6, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=1进行比较
第5组第5次处理结果:[5, 4, 3, 2, 1, 6, 7, 8, 9, 10]
  • 第6组比较:

循环条件数据为:[5, 4, 3, 2]
实际比较范围数据:[5, 4, 3, 2, 1]

比较对象arr[j]=5和arr[j + 1]=4进行比较
第6组第1次处理结果:[4, 5, 3, 2, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=3进行比较
第6组第2次处理结果:[4, 3, 5, 2, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=2进行比较
第6组第3次处理结果:[4, 3, 2, 5, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=1进行比较
第6组第4次处理结果:[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
  • 第7组比较:

循环条件数据为:[4, 3, 2]
实际比较范围数据:[4, 3, 2, 1]

比较对象arr[j]=4和arr[j + 1]=3进行比较
第7组第1次处理结果:[3, 4, 2, 1, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=4和arr[j + 1]=2进行比较
第7组第2次处理结果:[3, 2, 4, 1, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=4和arr[j + 1]=1进行比较
第7组第3次处理结果:[3, 2, 1, 4, 5, 6, 7, 8, 9, 10]
  • 第8组比较:

循环条件数据为:[3, 2]
实际比较范围数据:[3, 2, 1]

比较对象arr[j]=3和arr[j + 1]=2进行比较
第8组第1次处理结果:[2, 3, 1, 4, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=3和arr[j + 1]=1进行比较
第8组第2次处理结果:[2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
  • 第9组比较:

循环条件数据为:[2]
实际比较范围数据:[2, 1]

比较对象arr[j]=2和arr[j + 1]=1进行比较
第9组第1次处理结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib 入门教程

一. matplotlib 简介 Matplotlib是一个Python 2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib试图让简单的事情变得更简单&#xff0c;让无法实现的事情变得可能实现。 只需几行代码即可生成绘图&#xff0c;直方…

求购EV代码签名证书,看看性价比最优选项要多少钱?

在当今的数字化时代&#xff0c;EV代码签名证书作为一种强化软件安全防线的顶级数字证书&#xff0c;承担着验证软件源码真伪和完整性的重要任务。对于软件开发者和公司来说&#xff0c;购置EV代码签名证书无疑是必不可少的&#xff0c;而其年度费用也成为各方密切关注的核心议…

【计算机网络】DNS/ICMP协议/NAT技术

文章目录 一、DNS(Domain Name System)1.DNS背景2.域名3.浏览器中输入url后,发生的事情 二、ICMP协议1.什么是ICMP协议2.ICM功能3.ICMP的报文格式4.ping命令5.traceroute命令 三、NAT技术1.NAT技术背景2.NAT IP转换过程3.NAPT4.NAT技术的缺陷5.NAT和代理服务器 四、TCP/IP五层模…

【数据结构和算法】链表的简单实现

目录 c版本c语言版 &#x1f431;‍&#x1f680;个人博客https://blog.csdn.net/qq_51000584/ &#x1f431;‍&#x1f464;收录专栏&#xff1a;数据结构和算法 &#x1f431;‍&#x1f453;专栏目标&#xff1a;分享一些学习的代码 &#x1f431;‍&#x1f4bb;作者&…

vue项目中vue.config.js文件的介绍

vue.config.js 是一个可选的配置文件&#xff0c;如果项目的根目录中没有这个文件&#xff0c;则 Vue CLI 会使用默认的配置。这个文件的主要目的是为了让开发者能够调整 Vue CLI 生成的项目的默认配置。 vue.config.js 应该导出一个包含了配置选项的对象。这些配置选项包括但…

React PureComponent 和 React.memo()区别

1 注意 ● PureComponent和memo仅作为性能优化的方式存在 ● 不要依赖它来阻止渲染&#xff0c;会产生BUG ● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。 2 PureComponent 和React.memo() 区别 PureComponent 和React.memo()都是React优化…

Idea安装gideabrowser插件

Idea安装gideabrowser插件 一、安装二、设置教程 一、安装 gideabrowser链接地址 二、设置教程 在人生的舞台上&#xff0c;奋力拼搏&#xff0c;才能演绎出最精彩的人生之歌。面对挑战和困难&#xff0c;不妥协、不气馁&#xff0c;只争朝夕&#xff0c;方显坚韧与智慧。努…

如何使用Docker部署WBO容器并实现固定公网地址访问本地白板界面

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

高防服务器的原理

高防服务器的原理主要是通过各种技术手段来识别和阻止网络攻击&#xff0c;包括但不限于防火墙、入侵检测系统、入侵防御系统、流量过滤和清洗、黑白名单机制、行动分析和机器学习、散布式缓存和CDN、反向代理和负载均衡等。123456789 这些技术可以有效地检测和…

fpmarkets澳福归类总结不同十字星K线的含义

不同的十字星K线代表了不同的含义&#xff0c;各位投资者你们知道这些十字星K线的含义吗&#xff1f;今天fpmarkets澳福就归类总结一下。 首先墓碑十字星和蜻蜓十字星归为一类&#xff0c;重点以墓碑十字星作为参考&#xff1a; 墓碑十字星是一种熊市反转烛台模式&#xff0c;当…

如何将域名解析成IP地址?

相对于繁琐的IP地址&#xff0c;域名以其简便的记忆方式成为人们访问网站的首选。然而&#xff0c;计算机通讯的本质需要使用IP地址&#xff0c;而计算机并不直接理解域名。在这个过程中&#xff0c;域名解析成为了关键一环&#xff0c;而这项任务由DNS&#xff08;域名系统&am…

MySQL:错误ERROR 1045 (28000)详解

1.问题说明 有时候我们登录Mysql输入密码的时候&#xff0c;会出现这种情况&#xff1a; mysql -u root -p Enter Password > ‘密码’ 错误&#xff1a;ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: YES) 或者&#xff1a;错误…

2月26日做题总结(C/C++真题)

今天是2024年2月16日&#xff0c;新学期开学第一天。在大三这个重要阶段&#xff0c;我决定参加24年秋招。在准备项目的同时&#xff0c;也先做一些入门的笔试题吧&#xff0c;慢慢积累。如果你也是处于这个阶段&#xff0c;欢迎来找我交流讨论&#xff01; 今天是做题第一天&a…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

[图论] 树上不重复权值的路径数

解题思路 整体思路&#xff0c;枚举路径上每个点&#xff0c;记录这个点 u 可以向上延伸到多远&#xff0c;如果可延伸到 x 点&#xff0c;则这个点对答案的贡献为 dep[u] - dep[x](下文的maxx) 1 为什么枚举是向上延伸&#xff1f;因为可以记录已走过路径中已有的权值&…

【k8s配置与存储--配置管理】

1、ConfigMap的配置 1.1 ConfigMap介绍 ConfigMap 是一种 API 对象&#xff0c;用来将非机密性的数据保存到键值对中。使用时&#xff0c; Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap 将你的环境配置信息和容器镜像解耦&#xff0c;便于应用配…

STM32 I2C学习

IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步、串行、半双工通信总线。 同步&#xff1a;需要时钟线 串行&#xff1a;数据一位一位地发送 半双工&#xff1a;同一时间只能接受或发送&#xff0c;不能同时发送或…

【java】使用springMVC优雅的响应数据

1.抽象接口 import java.io.Serializable; public interface IResultCode extends Serializable {String getMessage(); int getCode(); } 2. 利用枚举类实现接口创建对象 public enum ResultCode implements IResultCode {SUCCESS(200, "操作成功"),FAILURE(400, &…

input框 自动获取焦点

<el-input style"width:200px" autofocus v-model"leftListname"></el-input> element-ui 的 el-input 组件的 autofocus 属性在某些情况下不能实现自动聚焦,有几个可能的原因: 1. autofocus 在移动设备上不被支持。如果是在移动设备上访问,au…

题目 1311: 数字三角形

题目描述: 示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径&#xff0c;使该路径所经过的数字的总和最大。  每一步可沿左斜线向下或右斜线向下走&#xff1b;  1< 三角形行数< 25&#xff1b;  三角形中的数字为整数< 1000&#xff1b; 代码…