算法学习笔记(1)-冒泡排序

实现冒泡排序算法 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 冒泡排序算法的原理:(从后往前) 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每... 阅读详情

      简介:  冒泡排序(Bubble Sort)是最为直观和易懂的排序算法之一,它的思想是前后比较,若前者大于后者就把前者和后者交换位置,就像一个重量大的泡泡一样,慢慢地浮至其他轻的泡泡之下。

    Java代码:

	//冒泡排序,普通版本,平均时间复杂度n^2,在数组排完前面几轮已经有序后仍会继续
	//排序,故在数组有序时时间复杂度仍为n^2
	 public static void bubbleSort1(int[] a) {
	 	 int n = a.length;
		 for (int i = 0; i < n - 1; i++) {
			 for (int j = i + 1; j < n - i - 1; j++) {
				 if (a[j] < a[j - 1]) {
					 swap(a, j, j-1);
				 }
			 }
		 }		 
	 }
	 
			
			
			
	public static void swap(int[] a, int i, int j){
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}

冒泡排序的平均时间复杂度为n^2,当数组在前面几轮排序后已经有序的情况下仍会继续执行剩余的比较,所以当数组基本有序时,其排序的时间复杂度也为n^2,但是这种情况有一个优化的方法可以将其优化为n,那就是加入一个flag标识,当某一轮循环没有元素的交换时说明已经有序,直接结束冒泡排序即可:

```java
     //冒泡排序,加入flag标识,当任何一轮没有交换元素时将其置为false,说明已经有序
     //平均时间复杂度为n^2,最好为n,只进行前面的几轮排序
     public static void bubbleSort(int[] a) {
          int n = a.length;
         for (int i = 0; i < n - 1; i++) {
             boolean flag = true;
             for (int j = i + 1; j < n - i; j++) {
                 if (a[j] < a[j - 1]) {
                     flag = false;
                     swap(a, j, j-1);
                 }
             }
             if (flag) {
                 return;
             }
            
         }    
     }
        
    public static void swap(int[] a, int i, int j){
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

```

    

动画演示:

    https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

思考:

    1、第一轮for循环的作用是标识这是第几个要进行冒泡排序的数,如i=0时,表示这是对数组的第一个数进行冒泡排序,假如数组有5个数,就要进行4次冒泡排序,因为最后一个数无需排序,它一定是最小的了。

    2、第二轮for循环的作用是定义比较的次数是多少次,如一个数组有5个数,那么在对以一个数进行冒泡排序时,需要比较(5-1)= 4次,第二个数进行比较时,需要比较3次。

    3、若前者小于后者,并不是结束循环,而是用后者去和接下来的数比较。如数组3 2 4 1,3比较到4的时候,判断3小于4,所以不能进到if中,即把索引往下移给4,用4和接下来的数进行比较,这样的作用是一轮下来,一定能筛选出大数将其排序到后面。

    4、冒泡排序是有缺点的:假如数组有n个元素,那么第一轮需要进行n-1次比较,第二轮需要n-2次比较,所以n-1轮后共比较

(n-1)+(n-2)+...+1 ~= n^2/2次,即算法的时间复杂度0与n^2成正比,所以大O表示法表示为O(n^2),是时间复杂度很大的一种排序算法。

Ubuntu 20.04 LTS下5分钟搞定ONLYOFFICE协作空间社区版(Docker版保姆级教程) 本文提供了一份在Ubuntu 20.04 LTS系统上,通过Docker快速部署ONLYOFFICE协作空间社区版的保姆级教程。内容涵盖从系统准备、Docker环境搭建,到执行自动化安装脚本、完成Web初始化的全流程,并详细说明了部署后的安全配置、数据备份及基本运维要点,帮助用户高效构建私有、安全、可控的团队文档协作平台。 阅读详情

相关推荐

设计空间探索:乘法器设计的面积、延时、功耗优化

4-2压缩器在减少延迟方面表现出色,适用于需要快速压缩的场景。6-2压缩器在资源占用方面具有优势,能够减少压缩树的层次数量和逻辑门数量。优化功耗:通过合理组合不同类型的压缩器,可以在延迟、资源占用和功耗之间找到最佳平衡点,从而实现优化的设计目标。###参考资料。

SiArch的博客 1882

7-13 冒泡法排序之过程 (15 分)

7-13 冒泡法排序之过程 (15 分) 本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。 冒泡排序的算法步骤描述如下: 第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1]; 第2步:在剩下未排序的n−1个数(a[0]...

lym673002837的博客 1万+

Rust 与 Golang 深度对决:从语法到应用场景的全方位解析

Rust 定义函数以fn关键字开头,参数需明确指定类型,返回值类型紧跟在箭头->之后。// 定义函数add,接收两个i32类型参数a和b,返回i32类型结果,功能为两数相加a + bRust 和 Golang 各有千秋,在不同领域展现独特优势。Rust 凭借强大的内存安全与高性能,在系统编程、网络编程以及对内存安全和性能要求高的场景中表现突出;Golang 则以简洁语法和出色并发性能,在云计算、分布式系统、Web 开发等领域占据一席之地。

muyouking 1770

对冒泡排序中for循环嵌套的理解(BubbleSort)

1.冒泡排序 冒泡排序是把无序的数据按从小到大的顺序进行排列。就像它本身的命名一样,把数组中小的数据值依次往前(或向上)推进,确保数组0下标的数据值为整组中最小的数值。 2.冒泡排序代码 //冒泡排序 public class BubbleSort { public static void sort(int[] array){ int temp=0;//临时变量 for

Abe32的博客 7279

T2T基因组组装实战指南:从数据到完整染色体

本文详细介绍了T2T基因组组装技术的实战指南,从测序数据选择到完整染色体组装的全流程。重点解析了ONT ultra-long和PacBio HiFi测序技术的优势,以及如何攻克端粒和着丝粒等重复区域的组装难题。通过具体案例和实用技巧,帮助研究人员实现从数据到完整染色体的高质量组装。

weixin_29292535的博客 846

COMSOL中的动网格

首先我们先了解几个概念 (1)网格重划分(remesh):就是在某些特定的区域进行网格的重新划分,在Maxwell软件中的直线运动区域,当运动物体运动后,这个区域进行重新划分。 (2)morph:网格不重新划分,小范围的进行网格变形,针对运动物体运动位移较小,对变形区域不进行重划分,能够提高效率。 (3)网格滑移(sliding):针对圆形运动区域,运动与非运动区域进行网格滑移,当然边界上两侧网格不共节点,该方法不需要网格重新划分,大部分软件针对圆形运动区域采用该方法,比如maxwell的band,b

midiio的博客 7873

对于冒泡排序的理解

对于冒泡排序的理解

weixin_63576293的博客 817

科研人必备!用WisPaper搭建个人文献知识库的完整指南(附Zotero联动技巧)

本文详细介绍了如何利用WisPaper搭建高效的个人文献知识库,包括文件命名标准化、文件夹结构设计、语义搜索技巧及与Zotero的深度联动方法。通过智能标签系统和知识图谱功能,科研人员可以快速定位关键文献,提升研究效率。特别适合需要管理大量学术文献的研究者。

weixin_30823001的博客 268

java 冒泡排序

java 冒泡排序

qq_41451744的博客 674

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2152

【React Native】源码分析之Native UI的封装和管理

转载请注明出处:http://blog.youkuaiyun.com/u013531824/article/details/54020287,谢谢。  ReactNative作为使用React开发Native应用的新框架,随着时间的增加,无论是社区还是个人对她的兴趣与日递增。此文目的是希望和大家一起欣赏一下ReactNative的部分源码。阅读源码好处多多,让攻城狮更溜的开发ReactNative应用的同时,也

Tiny的专栏 9780

java代码两种写法实现冒泡排序以及冒泡排序的优化

冒泡排序重点在于对给定数字序列的逐对扫描以及交换,其写法并不唯一。一般情况下,外层循环表示扫描的轮数,内层循环表示需要扫描的元素个数。排在最前面的既可以是最大值,也可以是最小值;对给定数据可以顺序扫描,也可以进行逆序扫描,其结果是等效的。对此,我在这里提供了两种写法和一种优化方案与大家分享。 方案一:顺序扫描给定数据,将无序数列中的最大元素依次排到最后。即先冒出最大的气泡 注释掉的代码部分提供...

Hello_MyDream的博客 3万+

Modbus协议全家桶(C#纯原生完整版):ModbusRTU + ModbusTCP + ModbusASCII 协议规范+完整封装+工业级实战

你已经掌握了C#串口/网口原生核心API和工业通信协议本质,而今天的主角Modbus协议,是工业通信领域绝对的王者、通用的标准、入门的必修课,没有之一。凡是做工业通信开发,必会Modbus协议;市面上99%的工业设备(PLC、变频器、温控仪、传感器、流量计、扫码枪)都原生支持Modbus协议。Modbus协议不是单一协议,而是一个「协议家族」,我们常说的就是这个家族的三大核心成员,也是工业现场的全部Modbus应用形态。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 565

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。 算法的核心在于每次通过两两比较交换位置,选出

渴望,就奋力追寻... 15万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【算法系列 | 1】深入解析排序算法之——冒泡排序

这些排序算法各有特点,可以根据具体需求选择适合的算法。在实际应用中,常常需要综合考虑时间复杂度、空间复杂度、稳定性等因素进行选择。

颜淡慕潇 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++常见排序算法——冒泡排序算法

首先说一下冒泡排序的基本算法思想: 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 以从小到大排序为例:a[5]={3,5,4,1,0}; 先将3和5进行比较,已经是我们需要的正序,不需要交换位置; 再将5和4进行比较,不是正序,相互交换顺序,序列变为{3,4,5,1,0}。

lengxuan001的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java 与排序算法(1):冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻两个元素的位置,使得较大的元素逐渐往后移动,直到最后一个元素为止。冒泡排序的时间复杂度为On2,空间复杂度为O1,是一种稳定的排序算法。

暗星涌动 1万+

算法之路_1、冒泡排序

一、详解 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(摘自百度百科) 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两...

郭岚的博客 1万+

排序算法——1冒泡排序算法

如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……在上述算法中,需要逐趟逐次的比较相邻元素的大小,如果待排序的数组中的元素大部分已经是有序的,仍然逐次比较就会比较浪费时间了,所以需要在判断当在某次比较中,各元素的位置没有发生交换时,就说明当前数组元素次序已经是有序的,不用再比较,可以结束冒泡排序。(1)N个元素排序,

Healer19的博客 5354

冒泡排序和双向冒泡排序算法

冒泡排序算法应该算是每个开发者入门必学的基础算法,它逻辑清晰简单,代码实现也并不复杂,这里用自己的话语来总结一下。 (这些为了方便随便打开了一个node项目写的,其他Java ,PHP,C等也是一样的道理,算法讲究的只是一个思维模式,知道怎么去实现就行,不要死抠语言) 先说简单的普通冒泡排序: 冒泡排序既然是一个排序算法,那么它就一定是有一个循环排序的过程,其实它的原理很简单,就是两层for循环嵌...

whiteBearClimb的博客 2918

冒泡排序算法

上图是无序的数据,要进行排序。 冒泡排序就是: 每一趟都是从开始的这个元素,两两进行比较,把大的元素往下交换(沉淀到底),把小的元素往上交换(冒泡),每一趟操作的数据都是除去前面的每一趟沉淀到底的数据之外的数据。 每一趟处理的方式是一样的,只是数据量是不同的。 第一趟:从开始的这个元素,两两进行比较,把大的元素往下交换(沉),把小的元素往上交换(冒泡) 第一趟下来,整体没排序,但是把整个序列的最大值94沉到底了。 第二趟:不用处理94

ljy的博客 1048

冒泡排序算法与改进的冒泡排序算法

对存放在数组的数据,按从前往后的方向进行多次扫描,当发现两个相邻的数据排序与要求的排序不相符时交换这两个数的位置,以从小到大的排序要求为例,这样较小的数据就会冒上来(称为冒泡排序)。每趟排序都会减少一个待排序的数,所以比较次数为n-i-1。从举例的结果可以看出,在进行完第四次排序后已经有序,所以不必继续进行下面的排序(继续进行排序,只进行数值的比较而数据不会移动)。i=1 第二趟排序: 0 1 2 6 8 4。i=3 第四趟排序: 0 1 2 4。...

m0_64529905的博客 1963

数据结构与算法-排序算法1-冒泡排序

排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。内部排序:将需要处理的所有数据都加载到内存中进行排序。外部排序:数据量过大(比如10亿个数据),无法全部加载到内存中,就需要借助外部存储(文件、磁盘等)进行排序。先加载一部分,排序完之后再加载另外一部分进行排序,排序完再合并。数组中n个元素,从数组第一个元素开始到最后一个元素,依次比较相邻元素的值,如果如果左端元素大于右端元素就交换它们的位置,使得较大的元素在右边。这样数组最右端的元素就是数组中的最大元素。

nameofworld的博客 1504

【算法】————1、冒泡排序

前言 最近感觉自己的思维不是非常灵活,所以想看看算法了,顺便就整理一下之前的内容,做个小记录吧! 排序算法 排序是计算机程序设计中的一种重要的操作,其功能是将一个任意序列的数据元素,通过排序算法重新排列成一个按关键字有序的序列。 a、排序的定义:对一序列对象根据某个关键字进行排序 输入:n个数:a1,a2,a3,...,an 输出:n个数的排列:a1',a2',a3',...,an',使...

Fly_鹏程万里 583

冒泡排序算法——算法学习笔记

最近准备换工作,然后面了几家公司,收到了一份还算满意的offer。面试过程中发现大公司都会喜欢面一些算法题。对于经常关注算法的人而言可能并不难,因为都是一些基础题,比如快速排序、冒泡排序、二叉树等等。但是对于平时工作从不关心算法的人而言那可真的够头大的。今天复习了冒泡排序,顺便记录下。也提醒下自己多多关注算法题,没事刷一刷总不是坏事。 package com.lixiang.algorithm; ...

大蟒蛇来了 378
上一篇: Maven学习笔记-分模块开发应注意的几点
下一篇: 算法学习笔记(2)-选择排序
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值