60秒带你了解冒泡排序

排序似乎有很多种排序,选择、插入、快速、归并、基数排序等等,今天实现一种最简单的排序方式:冒泡排序(Bubble Sort)。

 int[] arr = {9,1,6,3,8,4};

↓(如何通过算法实现这个过程?)

 int[] arr = {1,3,4,6,8,9};

能一步实现得了吗?一步不行就几步,拆分一下。

假设上述给定数组内的数据需要我们排序,如何开始第一步呢?

↓(这可能就是我们第一步需要实现的,一个开始)

 int[] arr = {1,6,3,8,4,9};

任何事都需要走出第一步,一个开始,一个契机。

题外话:但在这里还是得承认一下并不是所有问题都适合拆分的太细去解决,可能这种思路更适合应用在回顾,或者说是复盘的过程中。

目录

一、什么是冒泡排序?

二、如何更好地理解冒泡排序?

三、完整代码


一、什么是冒泡排序?

冒泡排序的基本实现思路:假设这个数组中最大的一个数字排在第一个,通过内层循环的两两比较将会被挪至最后一个,这个过程很形象,就像一个泡泡从水底一下子冒至水面。

要实现上面的第一步需要我们建立一个循环,通过遍历数组,再去在循环中添加具体的判断逻辑,如果前>后,会执行什么操作?

针对  前 > 后  的触发逻辑:

如果下标对应的前一个数小于后一个数则不触发,如果大于则 arr[ i + 1 ] = arr[ i ],前的值立刻被赋给后。同时这个时候前的值也应该变成后的值,可以简单的理解为位置调换。但是我们需要建立一个临时变量用来储存未改变前的后的值。

  if (arr[i] > arr[i + 1]) {//int temp = arr[i + 1];arr[i + 1] = arr[i];arr[i] = temp;}

所以把这个逻辑嵌套进循环里我们可以得到什么呢?

            for (int i = 0; i < arr.length - 1; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i + 1];arr[i + 1] = arr[i];arr[i] = temp;}}

执行一次得到如上的结果,这说明最大的数,通过循环两两比较后已经成功地被放到了它应该在的位置。

那么我们如果再重复执行几次这个操作呢?

二、如何更好地理解冒泡排序?

针对冒泡排序的内部循环,只能确保数组中最大的数被排至最后,所以需要再嵌套一个外部循环控制这个进程多次执行,因为可以这样理解,当第一次最大的已经被排到最后,第二大的就是整个循环进程中需要往后排的最大的,非最小的都会即时成为当下最大的。

public class Order {public static void main(String[] args) {int[] arr = {9,1,6,3,8,4};for (int j=0; j<arr.length-1; j++) {for (int k=0; k<arr.length; k++){System.out.print("["+arr[k]+"]");}for (int i = 0; i < arr.length - 1; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i + 1];arr[i + 1] = arr[i];arr[i] = temp;}}System.out.println();}}}

所以这时我们只需要仿照内部循环嵌套一个外部循环,但是是否需要执行那么多次呢?测试一下这个冒泡的过程,看需要执行到第几次就已经排序完毕。

由图可见其实第四次时就已经排序完成了,打印出来可以体现代码的具体逻辑。

三、完整代码

public class Main {public static void main(String[] args) {int[] arr = {9,1,6,3,8,4};for (int j=0; j<arr.length; j++) {for (int i = 0; i < arr.length - 1; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i + 1];arr[i + 1] = arr[i];arr[i] = temp;}}}for (int i = 0; i<arr.length; i++){System.out.print(arr[i]+" ");}}}

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

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

相关文章

NodeJS小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代&#xff0c;电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高&#xff0c;一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术&#xff0c;设计并实现一个功能强大的小…

conda篇----在已有conda环境的基础上升级python包

conda篇----在已有conda环境的基础上升级python包 原先的python版本 第一步&#xff1a; conda update --all(py11) [xxxaivrs01 xxx]$ conda update --all Collecting package metadata (current_repodata.json): done Solving environment: done> WARNING: A newer vers…

【读点论文】ASAM: Boosting Segment Anything Model with Adversarial Tuning,对抗学习提升性能

ASAM: Boosting Segment Anything Model with Adversarial Tuning Abstract 在不断发展的计算机视觉领域&#xff0c;基础模型已成为关键工具&#xff0c;对各种任务表现出卓越的适应性。其中&#xff0c;Meta AI 的 Segment Anything Model (SAM) 在图像分割方面表现突出。然…

首批!蚂蚁数科通过中国信通院面向大模型的可信执行环境产品专项测试

2024年6月17日&#xff0c;在中国信息通信研究院&#xff08;以下简称“信通院”&#xff09;组织的首批“面向大模型的增强型可信执行环境基础能力专项测试”中&#xff0c;蚂蚁数科摩斯顺利完成全部测试内容&#xff0c;成为首批完成此项测试的组织。 标准及测试介绍 《面向…

全局唯一id

问题引出&#xff1a; 由于数据库的自增的id很有规律&#xff0c;会让人猜到后续id 由于一个单表存储的数量有限&#xff0c;那么就会用多个表存储&#xff0c;每个表的id都是自增&#xff0c;这样导致id不唯一的情况。 引进新的方法&#xff1a; 具体解决方法&#xff1a;使用…

MySQL--函数、约束、多表查询

函数 函数指一段可以直接被另一段程序调用的程序或代码 字符串函数、数值函数、日期函数、流程函数 字符串函数 数值函数 日期函数 datediff&#xff08;date1,date2&#xff09;&#xff1a;date1-date2 流程函数 约束 概念&#xff1a;约束是作用于表中字段上的规则&…

ECCV:A Discriminative Feature Learning Approach for Deep Face Recognition

1 Abstract 卷积神经网络&#xff08;CNNs&#xff09;已广泛应用于计算机视觉领域&#xff0c;显著提高了计算机视觉领域的技术水平。在大多数可用的cnn中&#xff0c;使用软tmax损失函数作为监督信号来训练深度模型。为了增强深度学习特征的识别能力&#xff0c;本文提出了一…

AI自动生成PPT怎么用?5种提升演示效果的方法

随着#7月份我的同事一个个消失了#的话题热议&#xff0c;职场中的效率与变革再次成为焦点。 在忙碌的工作节奏中&#xff0c;AI自动生成PPT的软件悄然兴起&#xff0c;成为不少职场人的新宠。它们不仅简化了繁琐的PPT制作流程&#xff0c;更以高效、专业的姿态&#xff0c;助力…

包成功安装tiny-cuda-nn,记录安装过程中的问题解决,附带pytorch3d安装【踩坑指南】

tiny-cuda-nn安装过程中的问题解决&#xff0c;附带pytorch3d安装【踩坑指南】 前言tiny-cuda-nn第一种下载方法&#xff1a;命令行安装tiny-cuda-nn第二种下载方法&#xff1a;本地编译 pytorch3d安装 前言 official repo: https://github.com/NVlabs/tiny-cuda-nn 该包可以显…

Java 中的阻塞 IO 和非阻塞 IO

Java 中的阻塞 IO 和非阻塞 IO 1、阻塞 IO&#xff08;Blocking IO&#xff09;2、非阻塞 IO&#xff08;Non-blocking IO&#xff09;3、区别与应用场景4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; IO&#xff08;输入输出&…

基于Booth乘法和Wallace树的乘法器优化思想

基于Booth乘法和Wallace树的快速乘法器 为了理解Booth乘法和Wallace数如何让乘法器变得更快&#xff1a; 先考虑不优化的8位乘法器实现&#xff0c;即8个16位数字累积共进行7次加法运算&#xff0c;可以认为一次16位加法用到16个全加器&#xff0c;则共需要112个全加器件&…

【Linux操作系统-测试】第三节.Linux 系统、网络信息、用户权限命令总结

文章目录 前言一、Linux 系统相关信息命令 1.1 df 命令--查看磁盘剩余 1.2 ps 命令--查看进程 1.3 top 命令--显示进程运行状态 1.4 kill 命令说明 -- 杀死进程二、Linux 网络信息命令 2.1 ping 命令--检查网络是否连通 2.1 ifconfig--显示网络设…

(总结)编译ORB_SLAM2遇到的错误

目录 第一个错误error: ‘CV_BGR2GRAY’ was not declared in this scope 第二个错误error: ‘CV_GRAY2BGR’ was not declared in this scope 第三个错误是没有那个文件或目录 26 | #include 第四个错误是‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope 第…

Python实现的深度学习技术在水文水质领域应用

当前&#xff0c;深度学习作为人工智能的热门技术发展迅速&#xff0c;以其强大的非线性和不确定性处理能力在图像识别、语音识别、自然语言处理等领域取得了显著的成效。它是一种端到端的处理方法&#xff0c;在训练算法的指导下&#xff0c;深层神经网络自发地从原始数据中进…

什么是CAP理论及应用场景,为什么只能进行3选2

在理论计算机科学中&#xff0c;CAP定理&#xff08;CAP theorem&#xff09;&#xff0c;又被称作布鲁尔定理&#xff08;Brewers theorem&#xff09;&#xff0c;它指出对于一个分布式计算系统来说&#xff0c;不可能同时满足以下三点&#xff1a; 1、 一致性&#xff08;C…

计算机组成原理:408考研|王道|学习笔记II

系列目录 计算机组成原理 学习笔记I 计算机组成原理 学习笔记II 目录 系列目录第四章 指令系统4.1 指令系统4.1.1 指令格式4.1.2 扩展操作码指令格式 4.2 指令的寻址方式4.2_1 指令寻址4.2_2 数据寻址 4.3 程序的机器级代码表示4.3.1 高级语言与机器级代码之间的对应4.3.2 常用…

游戏AI的创造思路-技术基础-情感计算(1)

游戏中的AI也是可以和你打情感牌的哦&#xff0c;不要以为NPC是没有感情的&#xff0c;不过&#xff0c;不要和NPC打过多的情感牌&#xff0c;你会深陷其中无法自拔的~~~~~~ 目录 1. 情感计算算法定义 2. 发展历史 3. 公式和函数 3.1. 特征提取阶段 TF-IDF&#xff08;词频…

C++的异常处理机制

C的异常处理机制 (1)Why&#xff08;异常处理机制的作用&#xff09;(2)How&#xff08;异常机制如何工作&#xff09;A.抛出异常B.捕获异常C.处理异常D.传递异常 (3)抛出异常A.栈展开B.析构函数和异常C.异常对象 (4)捕获异常(4)处理异常A.构造函数的异常处理B.不抛出异常noexc…

中小学校园EasyCVR视频综合监管方案:构建安全、智能的校园环境

一、背景需求分析 随着科技的快速发展&#xff0c;校园安全问题日益受到社会各界的关注。尤其是在中小学校园中&#xff0c;学生的安全更是牵动着每一个家庭的心。为了更有效地保障学生的安全&#xff0c;提高校园安全管理水平&#xff0c;视频监控系统在中小学中的应用越来越…

伙伴活动|AI硬件大潮来袭,深圳的创客们在哪里?

「每一种硬件产品&#xff0c;都会被 GenAI 重新做一遍。」 分享一个社区伙伴「未来光锥」参与主办的活动。如果你同时对 AI 和硬件感兴趣&#xff0c;提到 maker 一词仍然会激动。推荐你参与这次活动。 AI 玩具Folotoy 的创始人、RTE 开发者社区成员王乐也将参与本次活动并分…