数组案例练习进阶版---对数组中的元素进行排序(冒泡法)

news2024/9/23 3:20:36

在上篇文章中,我们一起学习了常用排序法中的选择排序法,今天,我们将一起来学习新的排序方法——冒泡法排序

那么首先,什么是冒泡法呢?

首先,第一列,我们有四个大小不一的球,我们称最下面的球为第一个球,最上面的为第四个球,首先我们从第一个球开始比较,也就是对黄色区域内的两个球进行大小比较,并把较大的那个球放到更上面的位置,这样一来,我们就得到了第二列小球

我们再从第二个小球开始比较,因此黄色区域也随之移动,现在第二个小球开始和第三个小球进行比较 ,同理,比较后,我们把更大的那个球与相对较小的球进行位置交换,使大球处于上方,然后我们就得到了第三列

第三列比较后,我们就得到了四个球中最大的那个球,我们把它置入红色区域,如第四列所示

现在我们忽略红色区域,利用剩下的小球继续进行第二轮比较,首先是还是一样,在第一列的黄色区域内我们把两个球进行比较,并把大球放在上面

现在来到第二列,可以看到,大球本身就在上面,因此我们不做任何操作

至此,这三个球中,最大的那个又出现了,我们把也把它和刚刚那个大球一起置入红色区域,即第三列

由于红色区域外还剩下两个球,因此我们进行第三轮比较,此时正好大球在上面,因此我们直接把它置入红色区域

此时,红色区域外已经只剩下一个球了,我们可以发现,球的顺序已经被排好了,因为排好的球特别像水里面冒的泡泡,因此,我们称这种排序方法为冒泡法排序 

根据刚刚的分析,我们可以发现,4个球,只需要进行三轮比较,同理当数组长度为x时,我们只需对该数组中的数字进行x-1轮比较

不仅如此我们还可以得知,当进行第一轮比较时,红色区域还没有球,因此我们有四个球要比较,且只比较三次即可得到最大的球

第二轮比较时,红色区域有一个球了,因此我们只比较剩下的三个球即可,且只比较两次即可得到最大的球

我们的出结论,设需要比较的总球数为x,则比较的的次数始终为x-1,且每一轮比较,随着红色区域的扩大,x的值也随之减少

现在,我们设最外层循环为轮数,即:

for(int i=0;i<nums.length-1;i++){

如果有,5个数,数组长度就为5,我们就比较5-1=4轮,i的初值为0,每轮结束后,分别自增为1,2,3

 为4时结束循环,而0,1,2,3正好四次

然后内层循环则为次数,即:

for(int i=0;i<nums.length-1;i++){
    for (int j=0;j< nums.length-1-i;j++){

 j的初值为0,4个球只需比三次,同理如果有5个数,我们只需比四次,因此当j为0,1,2,3时正好四次,我们让j<5-1,即等于4时停止循环

为什么要减i呢?当第一轮时,红色区域为0,此时i也为0,第二轮时,i变为1,此时经过第一轮比较后,红色区域也正好为1,而我们每轮比较都要去掉红色区域的值,因此-i只是刚好凑巧能够满足需求。

好了,经过分析后,我们来看看代码:

public class Sort {
    public static void main(String[] args) {
        int[] nums = new int[]{28,43,16,35,27};//静态初始化数组
        int temp=0;//临时变量,用于交换值,否则会覆盖
        for(int i=0;i<nums.length-1;i++){//轮数
            for (int j=0;j< nums.length-1-i;j++){//每轮的比较次数
                if(nums[j]>nums[j+1]){//前面的如果比后面的大,交换位置
                    temp = nums[j];//把大的赋给临时变量
                    nums[j]=nums[j+1];//再把小的放到刚刚存大的那个位置
                    nums[j+1]=temp;//最后把临时变量里存着的那个大的放进刚刚存小的的那个位置
                }
            }

        }
        for (int i=0;i< nums.length;i++){
            System.out.println(nums[i]);//输出所有元素
        }
    }
}

结果:

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

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

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

相关文章

4款ai 制作 ppt工具帮你提高工作效率

在这个高度重视可视化展示的环境当中&#xff0c;PPT在许多的场合中都骑着非常重要的作用&#xff0c;但PPT制作过程却常常令人感到烦恼。而最近我发现了4个堪称神器的PPT制作工具&#xff0c;可以分享给大家。 1、笔灵 ppt 直通车&#xff1a;https://ibiling.cn/ppt-zone 这…

数据结构与算法 - 红黑树

一、概述 1. 历史 红黑树是一种自平衡二叉查找树&#xff0c;最早由一名叫Rudolf Bayer的德国计算机科学家于1972年发明。然而&#xff0c;最初的树形结构不是现在的红黑树&#xff0c;而是一种称为B树的结构&#xff0c;它是一种多叉树&#xff0c;可以用于在磁盘上存储大量…

美国司法部对谷歌反垄断案的最新进展,Google每年给苹果200亿?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 美国司法部对谷歌反垄断案的前因和最新进展 美国司法部对谷歌的反垄断案是一个复杂且历时长久的法律过程&#xff0c;其核心争议在于谷歌是否利…

CentOS 7.6 安装 Weblogic

注&#xff1a;本教程是以虚拟机作为安装环境&#xff0c;如果您公司需要安装 Weblogic 服务器&#xff0c;请先以虚拟机模拟安装一遍&#xff0c;否则出现失误&#xff0c;概不负责&#x1f601;。 一、环境 虚拟机&#xff1a;VMware Workstation 16 Linux&#xff1a;Cent…

@Autowired提示:Field injection is not recommended

1、问题 在项目升级版本过程中&#xff0c;Autowired提示Field injection is not recommendedField injection is not recommended Inspection info: Reports injected or autowired fields in Spring components. The quick-fix suggests the recommended constructor-based d…

Linux 下查看 CPU 使用率

目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…

Linux下自动监控进程运行状态

目录 背景应用举例1、使用crontab脚本监控服务2、使用shell脚本监控服务2.1 编写自定义监控脚本2.2 运行脚本 背景 假设有一个服务需要长期运行&#xff0c;但可能会由于某种原因导致服务意外停止&#xff0c;不能及时发现&#xff0c;某天来到公司后发现出问题了才意识到服务…

【linux】curl命令用法

curl命令认识 curl命令其实在平常工作中就已经在使用了&#xff0c;但是一直没有系统看过&#xff0c;就在这记录下&#xff0c;以后要用的话&#xff0c;可以在这儿查阅。 curl命令写的更清楚一点其实是cURL&#xff08;client url&#xff0c;客户端URL或者command url命令…

时间复杂度计算方法以及常见题型

时间复杂度是衡量算法运行时间随输入规模增长而增长快慢的一种度量方式。它并不是指算法在特定硬件上的实际运行时间&#xff0c;而是算法在理想环境下执行时间的增长趋势。计算时间复杂度时&#xff0c;我们主要关注算法中执行次数最多的操作&#xff08;即基本操作&#xff0…

算法板子:匈牙利算法——二分图的最大匹配

目录 1. 基础概念 &#xff08;1&#xff09;二分图的概念 &#xff08;2&#xff09; 匈牙利算法的作用 2. 代码 1. 基础概念 &#xff08;1&#xff09;二分图的概念 顶点集 V 分为两个集合&#xff0c;且图中每条边依附的两个顶点都分属于这两个子集&#xff0c;也就是第…

了解反向代理如何工作吗?

在当今数字化时代&#xff0c;网络通讯扮演着重要的角色&#xff0c;而代理技术为网络通讯提供了更多的灵活性和安全性。作为两种重要的代理技术&#xff0c;代理服务器和反向代理的运行原理和用途各有不同。本文将重点介绍反向代理的运行原理&#xff0c;深入探讨其在网络通讯…

运动耳机哪款好?多方位实测五大风靡网络的爆款,第一款竟然连奥运冠军都在用

随着健康意识的提升&#xff0c;将骨传导耳机作为运动伴侣的国人日益增多&#xff0c;其市场年度销售额已突破新高。然而&#xff0c;作为深耕运动装备领域多年的专家&#xff0c;我深感有责任告诫广大运动爱好者&#xff0c;在选择骨传导耳机时&#xff0c;务必保持警惕&#…

PD虚拟机共享文件夹 PD虚拟机共享蓝牙设备怎么设置 PD虚拟机如何共享文件

PD虚拟机&#xff08;Parallels Desktop&#xff09;是为有双系统使用需求人士设计的Mac系统软件。PD虚拟机可以在Mac电脑中设置Windows系统的应用软件。有了PD虚拟机的帮助&#xff0c;大家可以直接在Mac系统中使用其他如Windows的虚拟机系统&#xff0c;除此以外&#xff0c;…

软件RAID配置实战(2个案例场景)

文章目录 3、软件RAID管理-mdadm工具安装mdadm组件格式示例选项说明mdadm命令其它常用选项 4、相关查询命令查看创建RAID的进度查看RAID磁盘详细信息查看文件系统的磁盘空间使用情况 5、RAID配置示例场景1&#xff1a;RAID5步骤 场景2&#xff1a;RAID10步骤 6、移除RAID阵列 接…

031_java.util.concurrent.CopyOnWriteArrayList

继承体系 CopyOnWriteArrayList存在的目的是为了解决在高并发下list的读写。设计上希望只阻塞写行为&#xff0c;不会阻塞读行为。CopyOnWriteArrayList设计就基于此&#xff0c;在内部含有ReentrantLock用作修改时加锁&#xff0c;CopyOnWriteArrayList下有很多可以写方法&…

三种向量相似度计量方法——欧式距离、余弦相似度、皮尔逊相关系数

1、欧式距离 欧氏距离在机器学习可以清晰展示不同对象的相似程度。 欧式距离是最直观的距离度量方法之一&#xff0c;它衡量两个点之间的直线距离, 较小的欧式距离意味着较高的相似度。 分类——K近邻算法&#xff08;KNN&#xff09;&#xff1a;需要对一个新的样本进行分类…

IIS6 PUT漏洞

一.漏洞描述 IIS Server 在 Web 服务扩展中开启了 WebDAV &#xff0c;配置了可以写⼊的权限&#xff0c;造成任意⽂件上传 1.1环境搭建 环境 fofa&#xff1a;"IIS-6.0" 本地搭建2003 server 1.2漏洞复现 1.开启 WebDAV 和写权限&#xff1a; 1.3 漏洞复现 使…

随笔(三)——项目代码优化

文章目录 一、数据驱动的优化点0.项目技术1.需求说明2. 优化前3.优化后&#xff08;复杂版&#xff09;4.优化后&#xff08;可读性高版&#xff09; 二、使用循环遍历&#xff0c;减少if-else1.源代码2. 优化后3. 优点 一、数据驱动的优化点 0.项目技术 vue2 view design …

OpenAI 推出 gpt-4o-2024-08-06 模型 解析结构化输出功能 附体验平台

人工智能技术的边界再次被突破&#xff0c;OpenAI 社区迎来了 gpt-4o-2024-08-06 模型的问世&#xff0c;这不仅是一次技术的飞跃&#xff0c;更是对智能助手功能和可靠性的一次全面革新。 技术革新&#xff1a;gpt-4o-2024-08-06 模型的诞生 gpt-4o-2024-08-06 模型是 OpenA…

【深度学习】用Pytorch完成MNIST手写数字数据集的训练和测试

模型训练相关 思路&#xff1a; 导入数据集&#xff08;对数据集转换为张量&#xff09;加载数据集&#xff08;使数据集成为可以进行迭代&#xff09;搭建卷积模型进行模型训练&#xff08;每训练一轮查看一次在测试集上的准确率&#xff09;使用tensorboard进行可视化保存训…